Xcode Swift3的问题:无法理解新语法
昨天我更新到Xcode 8.2,这迫使我更新到Swift 3.0语法。在我的应用程序中,我有以下功能:Xcode Swift3的问题:无法理解新语法,xcode,swift3,ios10,nsurlsessiondatatask,xcode8.2,Xcode,Swift3,Ios10,Nsurlsessiondatatask,Xcode8.2,昨天我更新到Xcode 8.2,这迫使我更新到Swift 3.0语法。在我的应用程序中,我有以下功能: func performGetRequest(_ targetURL: URL!, completion:@escaping (_ data: Data?, _ HTTPStatusCode: Int, _ error: NSError?) -> Void) { let request = NSMutableURLRequest(url: targetURL) reque
func performGetRequest(_ targetURL: URL!, completion:@escaping (_ data: Data?, _ HTTPStatusCode: Int, _ error: NSError?) -> Void)
{
let request = NSMutableURLRequest(url: targetURL)
request.httpMethod = "GET"
let sessionConfiguration = URLSessionConfiguration.default
let Session = URLSession(configuration: sessionConfiguration)
let tasksession = Session.dataTask(with: request, completionHandler: { (data: Data?, response: URLResponse?, error: NSError?) -> Void in
if data != nil{
DispatchQueue.main.async(execute: { () -> Void in
completion(data: data, HTTPStatusCode: (response as! HTTPURLResponse).statusCode, error: error)})
}
else
{
print("Connection Lost")
}
})
tasksession.resume()
}
我得到这个错误:
无法使用类型为“”的参数列表调用“dataTask”(使用:NSMutableURLRequest,completionHandler:(数据?、URLResponse?、NSError?->Void)的参数列表)
请,有人能帮我纠正一下吗?对于Swift 3,如果您检查
苹果文档,现在将作为第一个参数,完成处理程序
更改为(数据?、URLResponse?、错误?->Void
。因此,请创建URLRequest
的实例,而不是NSMutableURLRequest
,并对completionHandler
进行更改。在使用大多数公共API的Swift 3中,它们已将错误更改为。所以,如果你也使用了Error
,那就更棒了
func performGetRequest(_ targetURL: URL!, completion:@escaping (_ data: Data?, _ HTTPStatusCode: Int, _ error: Error?) -> Void) {
let request = URLRequest(url: targetURL)
request.httpMethod = "GET"
let sessionConfiguration = URLSessionConfiguration.default
let Session = URLSession(configuration: sessionConfiguration)
let tasksession = Session.dataTask(with: request) { data, response, error in
if data != nil{
DispatchQueue.main.async {
completion(data: data, HTTPStatusCode: (response as! HTTPURLResponse).statusCode, error: error)
}
}
else
{
print("Connection Lost")
DispatchQueue.main.async {
completion(data: nil, HTTPStatusCode: (response as! HTTPURLResponse).statusCode, error: error)
}
}
}
tasksession.resume()
}
注意:您需要使用所有可能的方法调用您的completionHendler
,当您接收nil
数据时,您还没有调用它。您需要在else块内调用它,并将nil
作为数据值
编辑:您可以这样调用此函数
self.performGetRequest(url) { (data, status, error) in
if error != nil {
print(error?.localizedDescription)
return
}
//Use data here
}
非常感谢@Nirav D对您的帮助,但我还有一个问题,如何调用此函数performGetRequest谢谢again@bero目前Mac不可用,我明天会帮你的。好的,没问题,我在等你,非常感谢你的帮助help@bero查看编辑后的答案,了解如何调用此函数。非常感谢workXcode 8.2不会强制您更新到Swift 3.0,您仍然可以使用Swift 2.3。但Xcode 8.3将迫使您迁移到Swift 3.x。