我已将Advanced NSOperations示例应用更新为Swift 3.唯一剩下的构建错误来自using
类的此代码段。
DownloadEarthquakesOperation
错误如下:
无法使用类型'的参数列表调用'downloadTask'(带: URL,(URL?,URLResponse?,错误?) - >空隙)'
预期类型的参数列表'(with:URL,completionHandler: @escaping(URL?,URLResponse?,错误?) - >空隙)'
此错误对我没有任何意义,因为 let url = URL(string: "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_month.geojson")!
let task = URLSession.shared.downloadTask(with: url) { (url, response, error) in
self.downloadFinished(url, response: response, error: error)
}
属性不应影响呼叫站点。
有什么想法吗?
答案 0 :(得分:1)
一行闭包通常会导致问题,因为编译器试图从闭包中返回的任何行中推断出闭包的返回类型。从理论上讲,它应该能够推断出正确的类型(因为downloadFinished
返回Void
),但看起来在AdvancedNSOperations
的初始转换过程中存在很多问题,它只是让人感到困惑。您可以通过添加明确的return
语句来静音该警告:
let url = URL(string: "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_month.geojson")!
let task = URLSession.shared.downloadTask(with: url) { url, response, error in
self.downloadFinished(url, response: response, error: error)
return
}
坦率地说,一旦我完成转换(修复所有其他问题),我就可以返回并删除return
语句,这不再是问题。
答案 1 :(得分:0)
在 Swift 3 :
中试用let url = URL(string: "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_month.geojson")!
URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in
if error != nil {
print(error!)
return
}
// dosomething here
print(data)
}).resume()
希望有所帮助!