2015-11-09 65 views
0

因此,我想製作一個應用程序,調用forecast.io的API來獲取我的應用程序中的天氣。有人說我使用SwiftyJSON和Alamofire。我是編程新手,這是我的第一個應用程序,所以我真的不知道該怎麼做。這是我的代碼了,但我不知道這是否是正確與否,它的工作原理,但呼叫沒有量身定做的,我需要進入JSON數據,以獲得「溫度」的數據:如何在我的應用程序中獲取JSON數據

 // Get Weather 
    let URL = "https://api.forecast.io/forecast/apikey/\(lat),\(long)" 
    Alamofire.request(.GET, URL, parameters: nil) 
     .responseJSON { response in 
      let jsonData: AnyObject? 
      do { 
       jsonData = try NSJSONSerialization.JSONObjectWithData(response.data!, options: []) 
      } catch { 





      } 

    } 

它只說「jsonData」從未使用過。這就是我爲了打電話而寫的。

+0

您面臨的問題是什麼?你能更清楚一點嗎? – kabiroberai

+0

我不知道如何輸入JSON來獲取像「溫度」這樣的數據,就像我在「catch」中輸入的語法一樣 – perteadrian

回答

1

一旦你的jsonData變量,則可以通過以下線路中的do塊中的第一行

guard let jsonDict = jsonData as? NSDictionary else {return} 

後,如果您想獲得目前的預測使用它像一個普通的NSDictionary,你要做的就是

guard let currentForecast = jsonDict["currently"] as? NSDictionary else {return} 

然後你就可以用得到它的屬性this link

guard let temperature = currentForecast["apparentTemperature"] as? Int else {return} 

總而言之,你的代碼應該是這個樣子

let URL = "https://api.forecast.io/forecast/apikey/\(lat),\(long)" 
Alamofire.request(.GET, URL, parameters: nil) 
    .responseJSON { response in 
     let jsonData: AnyObject? 
     do { 
      jsonData = try NSJSONSerialization.JSONObjectWithData(response.data!, options: []) 
      guard let jsonDict = jsonData as? NSDictionary else {return} 
      guard let currentForecast = jsonDict["currently"] as? NSDictionary else {return} 
      guard let temperature = currentForecast["apparentTemperature"] as? Int else {return} 
      print(temperature) 
     } catch { 
      //TODO: Handle errors 
     } 
} 

catch塊是處理錯誤,因此,如果它不能解析JSON這就是你會顯示一個警告說,有一個錯誤。

+0

爲什麼使用'as!'?他們當然可以'沒有'。 – trojanfoe

+0

@trojanfoe我只是解釋它是如何工作的,所以OP很清楚。我只是更新答案。 – kabiroberai

+0

所以我的代碼應該看起來像這樣: 'do jsonData = try NSJSONSerialization.JSONObjectWithData(response.data !, options:[]) guard let jsonDict = jsonData as? NSDictionary其他{返回} 讓currentForecast = jsonDict [「當前」]爲! NSDictionary 讓溫度= currentForecast [「apparentTemperature」]爲! Int } catch { // TODO:句柄錯誤 } }' @kabiroberai – perteadrian

相關問題