2015-11-09 39 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

相关问题