2017-07-11 14 views
0

使用Google搜索這個主題並閱讀其他人對其他主題的回答並將其建議付諸實施後,我仍然無法弄清楚。IOS:呼叫可以丟棄,但沒有標記'嘗試',但不會處理錯誤

在我的代碼:

import Foundation 

protocol WeatherServiceDelegate { 
    func setWeather(weather: Weather) 
} 

class WeatherService { 
    var delegate: WeatherServiceDelegate? 

    func getWeather(city: String) { 
     let path = "http://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b1b15e88fa797225412429c1c50c122a1" 
     let url = URL(string: path)! 
     let session = URLSession.shared 
     let task = session.dataTask(with: url) { (data: Data?, response: URLResponse?, error: Error?) -> Void in 
      if let data = data { 
       //print(">>>>\(data)") 

       let json = JSON(data: data) 
      } 
     } 

     task.resume() 
     } 
} 

我從該行得到的錯誤。小紅箭頭向右下JSON的「J」 ......

let json = JSON(data: data) 

和錯誤的存在:

呼叫可以扔掉,但是沒有打上「嘗試」和誤差沒有處理

+0

您需要將所有的數據在{}括號內一個做的{} catch {}塊,並將'let json = JSON(data:data)'改爲'let json = try JSON(data:data)' – murphguy

+1

閱讀搖擺語言指南。認真。 – Alexander

回答

3

你想要做的是以下幾點。

var json: [AnyHashable:Any]? 

do { 
    json = try JSON(data: data) 
} catch _ { 
    json = nil 
} 

什麼Xcode是想說的是,調用JSON(data: data)可以拋出一個錯誤,你應該把它裏面try-catch

+0

不幸的是我得到更多的錯誤... –

+0

這是什麼意思? –

+2

@HarrySingh如果你要「趕上」,使用'try?'沒有意義。使用'try',或者移除'catch'。 – Alexander

相關問題