如何在 Swift 中将 NSHTTPURLResponse 转换为字符串
How to convert NSHTTPURLResponse to String in 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)")
但是这一行给我一个错误:Extra argument 'encoding' in Call.
var responseText: String = String(data: response, encoding: NSUTF8StringEncoding)
我怎样才能成功地将这个 "response" 转换成字符串?
就像 var responseText: String = response.description
一样简单。
body
获取数据并根据需要将其设为 utf 字符串。响应的描述不是响应 body
let responseData = String(data: data, encoding: NSUTF8StringEncoding)
header 字段
如果您想要 HEADER FIELD:
let httpResponse = response as NSHTTPURLResponse
let field = httpResponse.allHeaderFields["NAME_OF_FIELD"]
您需要以下代码,因为您的数据任务的响应数据存储在 data
中。 response
是 http 响应,带有状态代码等,有关 http 响应的更多信息,请转到 here
var responseString: String = String(data: data, encoding: NSUTF8StringEncoding)
更新答案:
事实证明您想要获取 header 字段的内容。
if let httpResponse = response as? NSHTTPURLResponse {
if let sessionID = httpResponse.allHeaderFields["JSESSIONID"] as? String {
// use sessionID
}
}
当您打印 object 时,会调用其 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()
}
如果您想以字符串形式查看答案 json,请在 Swift 5
中
let httpResponse = response as? HTTPURLResponse
if let jsonResponse = String(data: data!, encoding: String.Encoding.utf8) {
print("JSON String: \(jsonResponse)")
}
我想将我的响应从 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)")
但是这一行给我一个错误:Extra argument 'encoding' in Call.
var responseText: String = String(data: response, encoding: NSUTF8StringEncoding)
我怎样才能成功地将这个 "response" 转换成字符串?
就像 var responseText: String = response.description
一样简单。
body
获取数据并根据需要将其设为 utf 字符串。响应的描述不是响应 body
let responseData = String(data: data, encoding: NSUTF8StringEncoding)
header 字段
如果您想要 HEADER FIELD:
let httpResponse = response as NSHTTPURLResponse
let field = httpResponse.allHeaderFields["NAME_OF_FIELD"]
您需要以下代码,因为您的数据任务的响应数据存储在 data
中。 response
是 http 响应,带有状态代码等,有关 http 响应的更多信息,请转到 here
var responseString: String = String(data: data, encoding: NSUTF8StringEncoding)
更新答案:
事实证明您想要获取 header 字段的内容。
if let httpResponse = response as? NSHTTPURLResponse {
if let sessionID = httpResponse.allHeaderFields["JSESSIONID"] as? String {
// use sessionID
}
}
当您打印 object 时,会调用其 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()
}
如果您想以字符串形式查看答案 json,请在 Swift 5
中let httpResponse = response as? HTTPURLResponse
if let jsonResponse = String(data: data!, encoding: String.Encoding.utf8) {
print("JSON String: \(jsonResponse)")
}