我正在向API发出POST请求,我在Swift中成功获得了响应。以下是我的代码。
private func getData(url: NSURL) {
let config: NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
let session: NSURLSession = NSURLSession(configuration: config)
let dataTask: NSURLSessionDataTask = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: {(data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
if error {
println("Error Occurred: \(error.localizedDescription)")
} else {
println("\(response.allHeaderFields)") // Error
}
})
dataTask.resume()
}
我正在尝试使用allHeaderFields
转储标头字段,但我收到错误消息 NSURLResponse没有名为allHeaderFields 的成员。但它 does 拥有它!
语法或我调用它的方式一定有问题。有人可以告诉我如何纠正这个问题吗?
谢谢。
答案 0 :(得分:11)
详细说明Yogesh所说的......!
尝试使用" as"将NSURLRespones转换为NSHTTPURLResponse,因为我打赌NSURLResponse实际上是NSHTTPURLResponse,或者我可能下注。
这就是我的意思:
private func getData(url: NSURL) {
let config: NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
let session: NSURLSession = NSURLSession(configuration: config)
let dataTask: NSURLSessionDataTask = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: {(data: NSData!, urlResponse: NSURLResponse!, error: NSError!) -> Void in
if let httpUrlResponse = urlResponse as? NSHTTPURLResponse
{
if error {
println("Error Occurred: \(error.localizedDescription)")
} else {
println("\(httpUrlResponse.allHeaderFields)") // Error
}
}
})
dataTask.resume()
}
答案 1 :(得分:3)
从您提供的链接Link
NSHTTPURLResponse类是NSURLResponse的子类,它提供了访问特定于HTTP协议响应的信息的方法
而allHeaderFields
是NSHTTPURLResponse
类而非NSURLResponse
类的方法。因此,您必须使用NSHTTPURLResponse
而不是NSURLResponse
类。
答案 2 :(得分:0)
if navigationResponse.response is HTTPURLResponse {
let response = navigationResponse.response as! HTTPURLResponse
print(response.allHeaderFields) // all headers
}
答案 3 :(得分:0)
这是在Swift 3及更高版本中处理数据任务的解决方案。
let urlPath: String = "http://www.google.de"
guard let url: URL = URL(string: urlPath) else { return }
let request = URLRequest(url: url)
let response: URLResponse?
URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else {
print(error?.localizedDescription ?? "No data")
return
}
if let httpResponse = response as? HTTPURLResponse {
print("error \(httpResponse.statusCode)")
}
}.resume()