Как преобразовать 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 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
.