parse(){
AF.request("http://api.openweathermap.org/data/2.5/forecast?q=London&units=metric&appid=f7fbda9fc5f8e8a30619d82ee864d474").responseJSON{response in
guard let jsonData = response.data else {return}
do {
let weatherModel = try? JSONDecoder().decode(WeatherModel.self,from: jsonData)
let list = try List(from: weatherModel as! Decoder)
self.degreesLabel.text = String(list.main.temp)
} catch {
print("Error")
}
}
}
}
Мои модели
struct WeatherModel: Codable {
let cod: String
let message, cnt: Int
let list: [List]
let city: City
}
// MARK: - List
struct List: Codable {
let dt: Int
let main: MainClass
let weather: [Weather]
let clouds: Clouds
let wind: Wind
let visibility: Int
let pop: Double
let sys: Sys
let dtTxt: String
let snow: Snow?
enum CodingKeys: String, CodingKey {
case dt, main, weather, clouds, wind, visibility, pop, sys
case dtTxt = "dt_txt"
case snow
}
}
// MARK: - MainClass
struct MainClass: Codable {
let temp, feelsLike, tempMin, tempMax: Double
let pressure, seaLevel, grndLevel, humidity: Int
let tempKf: Double
enum CodingKeys: String, CodingKey {
case temp
case feelsLike = "feels_like"
case tempMin = "temp_min"
case tempMax = "temp_max"
case pressure
case seaLevel = "sea_level"
case grndLevel = "grnd_level"
case humidity
case tempKf = "temp_kf"
}
}
потому что модель не имеет отношения к тому, что там приходит
let weatherModel = try? JSONDecoder().decode(WeatherModel.self,from: jsonData) убери опционал, напиши просто try в блоке catch выводи ошибку чтобы понимать что распарсить не может, вместо print("Error") напиши print(error) убери let list = try List(from: weatherModel as! Decoder) это бессмысленная строка, list уже будет декодирован и будет находится в weatherModel.list присваивать уже надо будет (взял первый элемент массива) self.degreesLabel.text = String(weatherModel.list.first?.main.temp ?? 0.0)
Вот что выходит dataCorrupted(Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "list", intValue: nil), _JSONKey(stringValue: "Index 1", intValue: 1), CodingKeys(stringValue: "weather", intValue: nil), _JSONKey(stringValue: "Index 0", intValue: 0), CodingKeys(stringValue: "main", intValue: nil)], debugDescription: "Cannot initialize MainEnum from invalid String value Rain", underlyingError: nil))
Обсуждают сегодня