Ios 如何从子JSON获取数据

Ios 如何从子JSON获取数据,ios,json,swift,weather-api,Ios,Json,Swift,Weather Api,我正在制作一个天气应用程序,我正在尝试从我儿子的文件中获取日期和天气。我成功进入了“每日”,但无法进入“每日”中的“数据”。代码如下: func downloadForecastWeather(completed: @escaping DownloadComplete) { Alamofire.request(FORECAST_API_URL).responseJSON { (response) in let result = response.result

我正在制作一个天气应用程序,我正在尝试从我儿子的文件中获取日期和天气。我成功进入了“每日”,但无法进入“每日”中的“数据”。代码如下:

func downloadForecastWeather(completed: @escaping DownloadComplete) {
    Alamofire.request(FORECAST_API_URL).responseJSON { (response) in
        let result = response.result
        if let dictionary = result.value as? Dictionary<String, AnyObject> {
            if let list = dictionary["list"] as? [Dictionary<String, AnyObject>] {
                for item in list {
                    let forecast = ForecastWeather(weatherDict: item)
                    self.forecastArray.append(forecast)
                }
                self.forecastArray.remove(at: 0)
                self.tableView.reloadData()
            }
        }
        completed()
    }
}
func下载天气预报(已完成:@escaping DownloadComplete){
请求(预测API URL).responseJSON{(响应)在
让result=response.result
如果let dictionary=result.value as?dictionary{
如果let list=dictionary[“list”]as?[dictionary]{
对于列表中的项目{
let forecast=天气预报(天气预报:项目)
self.forecastArray.append(预测)
}
self.forecastaray.remove(at:0)
self.tableView.reloadData()
}
}
已完成()
}
}
这是我的天气预报课:

init(weatherDict: Dictionary<String, AnyObject>) {
    if let temp = weatherDict["temperatureMin"] as? Double {

            let rawValue = (temp - 273.15).rounded(toPlaces: 0)
            self._temp = rawValue
        }


    if let date = weatherDict["time"] as? Double {

        let rawDate = Date(timeIntervalSince1970: date)
        let dateFormatter = DateFormatter()
        dateFormatter.dateStyle = .medium

        self._date = "\(rawDate.dayOfTheWeek())"
    }

}
init(weatherDict:Dictionary){
如果让温度=weatherDict[“temperatureMin”]为双精度{
让原始值=(温度-273.15)。四舍五入(顶部位置:0)
自身温度=原始值
}
如果让日期=天气预报[“时间”]为双精度{
让rawDate=日期(时间间隔自1970年起:日期)
让dateFormatter=dateFormatter()
dateFormatter.dateStyle=.medium
self.\u date=“\(rawDate.dayofweek())”
}
}
以下是json的链接:
因此,基本上我的问题是如何从“每日”中的“数据”中获取数据,并在我的for-in方法中使用它。

如果您使用的是Swift 4,您应该能够在预测天气模型中采用可编码协议

这将允许您执行类似这样的操作(并非完全如此):

对于一个相当深入的阅读,我建议从这里开始


如果你想要更多的阅读,我觉得这本书(付费)很棒

尝试使用
SwiftyJSON
它很容易集成到您的代码中,您只需在
downloadForecastWeather
函数中添加以下代码即可

func downloadForecastWeather(completed: @escaping DownloadComplete) {
        Alamofire.request(FORECAST_API_URL).responseJSON { (response) in

            let jsondata = JSON(response.result.value!)

            if let myData = jsondata["list"]["daily"]["data"].arrayObject { // here you can access your data inside daily
                for data in myData {
                    let forecast = ForecastWeather(weatherDict: data)
                    self.forecastArray.append(forecast)
                }
                self.forecastArray.remove(at: 0)
                self.tableView.reloadData()
            }
            completed()
        }
    }
有关更多详细信息,请参阅此

我希望它对你有用


:D

使用JSON.parse(response)而不是使用字典将您的响应转换为JSON。通过这种方式,您将拥有一个随时可用的JavaScript对象。在你的浏览器控制台上试试。使用codable现在不使用字典“和你的天气预报课”吗?而是使用struct来实现这个。。。或者这要看情况而定,所以也许“用你的天气预报模型”?很好的回答:)改变了
func downloadForecastWeather(completed: @escaping DownloadComplete) {
        Alamofire.request(FORECAST_API_URL).responseJSON { (response) in

            let jsondata = JSON(response.result.value!)

            if let myData = jsondata["list"]["daily"]["data"].arrayObject { // here you can access your data inside daily
                for data in myData {
                    let forecast = ForecastWeather(weatherDict: data)
                    self.forecastArray.append(forecast)
                }
                self.forecastArray.remove(at: 0)
                self.tableView.reloadData()
            }
            completed()
        }
    }