Как конвертировать 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() это вы получаете текстовое представление.

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

  1. Легкий способ

    let responseText = response.description
    

Однако это хорошо только для отладки.

  1. Локализованный способ

    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,

Другие вопросы по тегам