как получить данные из Child JSON - PullRequest
0 голосов
/ 11 февраля 2019

Я делаю приложение о погоде и пытаюсь узнать дату и погоду из файла моего сына.Я успешно попал внутрь «ежедневно», но я не могу проникнуть внутрь «данных», которые находятся внутри «ежедневно».это код:

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 Так что в основном мой вопрос заключается в том, какполучить данные из «data», которые находятся внутри «daily», и использовать их в методе for in.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Попробуйте использовать с 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

0 голосов
/ 11 февраля 2019

Если вы используете Swift 4, вы сможете использовать протокол Codable с вашей моделью ForecastWeather.

Это позволит вам сделать что-то вроде этого (не совсем так):

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

Для более глубокого прочтения, я рекомендую начать здесь с Apple Docs

Если вы хотите больше читать, я нашел эту книгу (платную) фантастической. Руководство летной школы по Swift Codable

...