如何在Swift中将NSHTTPURLResponse转换为String

时间:2015-01-25 21:16:59

标签: string swift xcode6 nshttpurlresponse

我想将我的响应从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)")

但这一行给我一个错误:额外的参数'编码'在电话中。

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

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

6 个答案:

答案 0 :(得分:28)

抓取数据并根据需要将其设为utf字符串。响应的描述不是响应主体

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

标题字段

如果你想要一个HEADER FIELD:

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

答案 1 :(得分:6)

更新答案:

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

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

当您打印对象时,会调用其description方法。

这就是为什么当你println()获得文字表示时。

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

  1. 简单方法

    let responseText = response.description
    
  2. 但是,这只适用于调试。

    1. 本地化的方式

      let localizedResponse = NSHTTPURLResponse.localizedStringForStatusCode(response.statusCode)
      
    2. 每当您需要向用户显示错误时,请使用第二种方法。

答案 2 :(得分:2)

您需要以下代码,因为数据任务的响应数据存储在data中。 response是http响应,包含状态代码等,有关http响应的更多信息,请here

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

答案 3 :(得分:2)

要迅速获得新版本

   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()

}

答案 4 :(得分:1)

如果您想以字符串形式查看答案json,请在Swift 5中

let httpResponse = response as? HTTPURLResponse

if let jsonResponse = String(data: data!, encoding: String.Encoding.utf8) {
    print("JSON String: \(jsonResponse)")
}

答案 5 :(得分:-1)

就像var responseText: String = response.description一样简单。