我正在将我的代码转换为swift 3,但得到"表达式的类型是不明确的,没有更多的上下文"以下代码中的错误。
open class func performGetRequest(_ targetURL: URL!, completion: @escaping (_ data: Data?, _ HTTPStatusCode: Int, _ error: NSError?) -> Void) {
var request = URLRequest(url: targetURL)
request.httpMethod = "GET"
let sessionConfiguration = URLSessionConfiguration.default
let session = URLSession(configuration: sessionConfiguration)
let task = session.dataTask(with: request) { (data, response, error) in
DispatchQueue.main.async(execute: {
completion(data, response.statusCode,error)
})
}
task.resume()
}
答案 0 :(得分:1)
编译器希望Error
不是NSError
。
此外,在Swift 3中省略了完成处理程序中的参数标签,如果你的实际意思是非可选的,则不要传递IUO *参数:
open class func performGetRequest(_ targetURL: URL, completion: @escaping (Data?, Int, Error?) -> Void) {
最后,在这种情况下你不需要URLRequest
,GET是默认值,所以只需将URL传递给dataTask
并删除与请求相关的两行。
(*)Implicit Unwrapped Optional
答案 1 :(得分:1)
您的代码首先出现两个问题response.statusCode
,响应的类型为URLResponse
且它没有属性statusCode
,因此您需要输入强制转换为{{ 3}}获取HTTPURLResponse
。第二个来自Swift 3使用原生Error
而不是NSError
,所以你的整个代码就是这样。
open class func performGetRequest(_ targetURL: URL!, completion: @escaping (_ data: Data?, _ HTTPStatusCode: Int, _ error: Error?) -> Void) {
var request = URLRequest(url: targetURL)
request.httpMethod = "GET"
let sessionConfiguration = URLSessionConfiguration.default
let session = URLSession(configuration: sessionConfiguration)
let task = session.dataTask(with: request) { (data, response, error) in
DispatchQueue.main.async(execute: {
completion(data, (response as! HTTPURLResponse).statusCode,error)
})
}
task.resume()
}