如何从Child JSON获取数据

问题描述 投票:0回答:2

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

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

这是我的ForecastWeather类:

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

}

这里是json:https://api.darksky.net/forecast/132d3013b6e07bdf66159c1f5a90f76c/37.8267,-122.4233的链接所以基本上我的问题是如何从“每日”里面的“数据”中获取数据并在我的for in方法中使用它。

ios json swift weather-api
2个回答
1
投票

尝试使用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()
        }
    }

有关详细信息,请参阅此Documentation

我希望这个对你有用。

:D


0
投票

如果您使用的是Swift 4,则应该可以在您的ForecastWeather模型中采用Codable协议。

这将允许你做一些像这样的事情(不完全像这样):

let weather = try JSONDecoder().decode(Weather.self, from: jsonData!)

对于合理深入阅读,我建议从Apple Docs开始

如果你想要更多阅读,我发现这本书(付费)太棒了。 Flight School Guide to Swift Codable

© www.soinside.com 2019 - 2024. All rights reserved.