URLSession实例方法`downloadTask`错误

时间:2017-02-16 02:09:31

标签: ios swift swift3

我已将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) } 属性不应影响呼叫站点。 有什么想法吗?

2 个答案:

答案 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()

希望有所帮助!