Как конвертировать NSHTTPURLResponse в строку в Swift
Я хотел бы преобразовать мой ответ из типа NSHTTPURLResponse в строку:
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)")
Но эта строка выдает мне ошибку: дополнительный аргумент 'кодировка' в Call.
var responseText: String = String(data: response, encoding: NSUTF8StringEncoding)
Как я могу успешно преобразовать этот "ответ" в строку?
5 ответов
тело
возьмите данные и сделайте из них строку utf, если хотите. Описание ответа не является телом ответа
let responseData = String(data: data, encoding: NSUTF8StringEncoding)
поле заголовка
если вы хотите вместо поля заголовка:
let httpResponse = response as NSHTTPURLResponse
let field = httpResponse.allHeaderFields["NAME_OF_FIELD"]
Обновленный ответ:
Оказывается, вы хотите получить содержимое поля заголовка.
if let httpResponse = response as? NSHTTPURLResponse {
if let sessionID = httpResponse.allHeaderFields["JSESSIONID"] as? String {
// use sessionID
}
}
Когда вы печатаете объект, его description
метод вызывается.
Вот почему, когда вы println()
это вы получаете текстовое представление.
Есть два способа выполнить то, что вы хотите.
Легкий способ
let responseText = response.description
Однако это хорошо только для отладки.
Локализованный способ
let localizedResponse = NSHTTPURLResponse.localizedStringForStatusCode(response.statusCode)
Используйте второй подход всякий раз, когда вам нужно отобразить ошибку для пользователя.
Для более новой версии в Swift
let task = session.dataTask(with: url) {(data, response, error) in
let httpResponse = response as! HTTPURLResponse
let type = httpResponse.allHeaderFields["Content-Type"]
print("Content-Type", type)
let l = httpResponse.allHeaderFields["Content-Length"]
print("Content-Length", l)
if let response = response { // Complete response
print(response)
}
}catch {
print(error)
}
}
}.resume()
}
Вам понадобится код ниже, потому что данные ответа от вашей задачи данных хранятся в data
, response
это http-ответ, с кодами состояния и т. д., для получения дополнительной информации о http-ответе перейдите сюда
var responseString: String = String(data: data, encoding: NSUTF8StringEncoding)
Если вы хотите видеть ответ json в виде строки, в Swift 5
let httpResponse = response as? HTTPURLResponse
if let jsonResponse = String(data: data!, encoding: String.Encoding.utf8) {
print("JSON String: \(jsonResponse)")
}
Это было так просто, как var responseText: String = response.description
,