2017-02-16 34 views
1

我已經更新了Advanced NSOperations示例應用來斯威夫特3.剩下的只有建立自己的錯誤是在這個代碼片段從DownloadEarthquakesOperation類。URLSession實例方法`downloadTask`錯誤

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) 
    } 

錯誤讀取:

不能與類型的參數列表調用 'downloadTask' '(配:? 網址(URL?URLResponse?錯誤) - >無效)'

預期類型的​​一個參數列表 '(帶:URL,completionHandler: @escaping(URL ?, URLResponse ?,錯誤) - >無效)'

Ť他的錯誤對我來說沒有任何意義,因爲@escaping屬性不應該影響呼叫站點。 有什麼想法?

+0

這看起來很奇怪。如果您嘗試不使用尾隨閉包語法會怎麼樣?即添加'completionHandler:'標籤並將其移到裏面) –

+0

@DaveWeston試過了。仍然沒有運氣。 – jjatie

回答

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聲明,這是沒有更長的問題。

0

嘗試在斯威夫特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() 

希望它能幫助!