如何在Swift中将NSHTTPURLResponse转换为String

Kar*_*var 15 string nshttpurlresponse swift xcode6

我想将我的响应从NSHTTPURLResponse类型转换为String:

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

下面的行将响应消息输出到控制台.

println("Response: \(response)")
Run Code Online (Sandbox Code Playgroud)

但这一行给我一个错误:Call中的额外参数'encoding'.

var responseText: String = String(data: response, encoding: NSUTF8StringEncoding)
Run Code Online (Sandbox Code Playgroud)

如何成功将此"响应"转换为字符串?

Dai*_*jan 31

身体

如果你愿意,抓住数据并使其成为字符串.响应的描述不是响应主体

let responseData = String(data: data, encoding: NSUTF8StringEncoding)
Run Code Online (Sandbox Code Playgroud)

标题字段

如果你想要一个HEADER FIELD:

let httpResponse = response as NSHTTPURLResponse
let field = httpResponse.allHeaderFields["NAME_OF_FIELD"]
Run Code Online (Sandbox Code Playgroud)


HAS*_*HAS 6

更新答案:

事实证明,您希望获得标题字段的内容.

if let httpResponse = response as? NSHTTPURLResponse {
    if let sessionID = httpResponse.allHeaderFields["JSESSIONID"] as? String {
        // use sessionID
    }
}
Run Code Online (Sandbox Code Playgroud)

打印对象时,description会调用其方法.

这就是为什么当你println()得到一个文本表示.

有两种方法可以达到你想要的效果.

  1. 简单的方法

    let responseText = response.description
    
    Run Code Online (Sandbox Code Playgroud)

但是,这只适用于调试.

  1. 本地化的方式

    let localizedResponse = NSHTTPURLResponse.localizedStringForStatusCode(response.statusCode)
    
    Run Code Online (Sandbox Code Playgroud)

需要向用户显示错误时,请使用第二种方法.