URLSession 在 Swift 3 中抛出转换错误

URLSession throws conversion error in Swift 3

我刚刚下载了Xcode8,现在是以前的功能代码:

let Task = URLSession.sharedSession.dataTaskWithRequest(Request) {

   (data : NSData!, response : URLResponse!, error : NSError!) in

}

抛出错误:

Cannot convert value of type '(NSData!, URLResponse!, NSError!) -> ()' to expected argument type '(Data?, URLResponse?, Error?) -> Void'

什么是错误的或从 Xcode 2 改变了什么?

如果你给他们可选的('?')而不是强迫他们,他们似乎可以毫无问题地运行:

let task = URLSession.shared.dataTask(with: Request) {

    (data : Data?, response : URLResponse?, error : Error?) in

}

错误消息只是说编译器想要

let task = URLSession.sharedSession.dataTaskWithRequest(request) {

   (data : Data?, response : URLResponse?, error : Error?) in

}

但您根本不需要类型注释,这神奇地避免了错误

let task = URLSession.sharedSession.dataTaskWithRequest(request) {

   (data, response, error) in

}

但是在Swift3中你必须写

let task = URLSession.shared.dataTask(with: request) { (data, response, error) in ... }