Как преобразовать NSHTTPURLResponse в String в Swift

Я хотел бы преобразовать свой ответ из типа NSHTTPURLResponse в String:

let task = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) -> Void in 
     println("Response: \(response)")
     var responseText: String = String(data: response, encoding: NSUTF8StringEncoding)
})

Строка ниже выводит ответное сообщение на консоль.

println("Response: \(response)")

Но эта строка делает мне ошибку: дополнительный аргумент 'encoding' в Call.

var responseText: String = String(data: response, encoding: NSUTF8StringEncoding)

Как я могу успешно преобразовать этот "ответ" в строку?

Ответ 1

Тело

захватите данные и сделайте это utf string, если хотите. Ответное описание не является телом ответа

let responseData = String(data: data, encoding: NSUTF8StringEncoding)

поле заголовка

если вы хотите вместо поля HEADER FIELD:

let httpResponse = response as NSHTTPURLResponse
let field = httpResponse.allHeaderFields["NAME_OF_FIELD"]

Ответ 2

Обновленный ответ:

Как выясняется, вы хотите получить содержимое поля заголовка.

if let httpResponse = response as? NSHTTPURLResponse {
    if let sessionID = httpResponse.allHeaderFields["JSESSIONID"] as? String {
        // use sessionID
    }
}

Когда вы печатаете объект, его метод description вызывается.

Вот почему, когда вы println(), вы получаете текстовое представление.

Есть два способа выполнить то, что вы хотите.

  • Простой способ

    let responseText = response.description
    

Однако это полезно только для отладки.

  1. Локализованный путь

    let localizedResponse = NSHTTPURLResponse.localizedStringForStatusCode(response.statusCode)
    

Используйте второй подход, когда вам нужно отображать ошибку для пользователя.

Ответ 3

Вам понадобится код ниже, потому что данные ответа из вашей задачи данных хранятся в data. response - это ответ HTTP, коды состояния и т.д., для получения дополнительной информации о http response go здесь

var responseString: String = String(data: data, encoding: NSUTF8StringEncoding)

Ответ 4

Это было так же просто, как var responseText: String = response.description.