На самом деле структура ответа отличается от того, что вы пытаетесь сделать в этой строке,
self.weatherModel = try decoder.decode([WeatherModelDecodable].self, from: result!)
Ответ не является массивом, как вы можете видеть его в json viewer нажав этот URL в любом браузере.Вы ожидаете массив объектов json, но это не так.Поэтому, если вы декодируете его как отдельный объект, он будет правильно декодироваться, как показано ниже:
let weatherModel = try decoder.decode(WeatherModelDecodable.self, from: result!)
print(weatherModel.city.name)
Итак, SecondTaskVC
будет выглядеть следующим образом:
class SecondTaskVC: UIViewController {
var weatherModel: WeatherModelDecodable?
override func viewDidLoad() {
let url = URL(string: "https://api.openweathermap.org/data/2.5/forecast?lat=42.874722&lon=74.612222&APPID=079587841f01c6b277a82c1c7788a6c3")
Alamofire.request(url!).responseJSON { (response) in
let result = response.data
do{
let decoder = JSONDecoder()
self.weatherModel = try decoder.decode(WeatherModelDecodable.self, from: result!)
print(self.weatherModel!.city.name)
}catch let error{
print("error in decoding",error.localizedDescription)
}
}
}
}
Вы должны декодировать соответствующиеобъекты с той же структурой, которую вы получаете в ответе.