Swift 1.2 到 swift 2:无法将类型的值转换为预期的参数类型
Swift 1.2 to swift 2: Cannot convert value of type to expected argument type
我正在尝试根据我在网上找到的教程 (https://www.raywenderlich.com/85528/user-accounts-ios-ruby-rails-swift#next_section) 创建一个 NSURLSession 任务,但我收到以下错误:
Cannot convert value of type '(NSData!, NSURLResponse!, NSError!) -> ()' to expected argument type '(NSData?, NSURLResponse?, NSError?) -> Void
在这段代码中:
let task = session.dataTaskWithRequest(request) { (data: NSData!, response: NSURLResponse!, error: NSError!) in
问题所在的函数可以在这里找到
func sendRequest(request: NSURLRequest, completion:(NSData!, NSError!) -> Void) -> () {
// Create a NSURLSession task
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request) { (data: NSData!, response: NSURLResponse!, error: NSError!) in
if error != nil {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
completion(data, error)
})
return
}
dispatch_async(dispatch_get_main_queue(), { () -> Void in
if let httpResponse = response as? NSHTTPURLResponse {
if httpResponse.statusCode == 200 {
completion(data, nil)
} else {
var jsonerror:NSError?
if let errorDict = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error:&jsonerror) as? NSDictionary {
let responseError : NSError = NSError(domain: "HTTPHelperError", code: httpResponse.statusCode, userInfo: errorDict as? [NSObject : AnyObject])
completion(data, responseError)
}
}
}
})
}
可以在此处 (https://codeshare.io/uJPcX) 第 68 行找到完整的代码块。
改变
data:NSData!, response: NSURLResponse!, error: NSError!
到
data: NSData?, response: NSURLResponse?, error: NSError?
当进一步使用 data
或 response
等时,您可能必须写 is as data!
来解包变量,但要小心,因为如果变量是 nil
它会崩溃,所以你必须先检查它是否不是零
我正在尝试根据我在网上找到的教程 (https://www.raywenderlich.com/85528/user-accounts-ios-ruby-rails-swift#next_section) 创建一个 NSURLSession 任务,但我收到以下错误:
Cannot convert value of type '(NSData!, NSURLResponse!, NSError!) -> ()' to expected argument type '(NSData?, NSURLResponse?, NSError?) -> Void
在这段代码中:
let task = session.dataTaskWithRequest(request) { (data: NSData!, response: NSURLResponse!, error: NSError!) in
问题所在的函数可以在这里找到
func sendRequest(request: NSURLRequest, completion:(NSData!, NSError!) -> Void) -> () {
// Create a NSURLSession task
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request) { (data: NSData!, response: NSURLResponse!, error: NSError!) in
if error != nil {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
completion(data, error)
})
return
}
dispatch_async(dispatch_get_main_queue(), { () -> Void in
if let httpResponse = response as? NSHTTPURLResponse {
if httpResponse.statusCode == 200 {
completion(data, nil)
} else {
var jsonerror:NSError?
if let errorDict = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error:&jsonerror) as? NSDictionary {
let responseError : NSError = NSError(domain: "HTTPHelperError", code: httpResponse.statusCode, userInfo: errorDict as? [NSObject : AnyObject])
completion(data, responseError)
}
}
}
})
}
可以在此处 (https://codeshare.io/uJPcX) 第 68 行找到完整的代码块。
改变
data:NSData!, response: NSURLResponse!, error: NSError!
到
data: NSData?, response: NSURLResponse?, error: NSError?
当进一步使用 data
或 response
等时,您可能必须写 is as data!
来解包变量,但要小心,因为如果变量是 nil
它会崩溃,所以你必须先检查它是否不是零