Swift: JSONDecoder, возвращающий ноль из API - PullRequest
0 голосов
/ 27 апреля 2019

в настоящее время работает через приложение, которое получает и декодирует данные из API OpenWeatherMap, в настоящее время у меня все работает, кроме как заставить декодер что-то вернуть.В настоящее время декодер возвращает ноль, однако я получаю байты данных из вызова API.Я не совсем уверен, в чем может быть проблема.У меня есть структура ViewModel, настроенная с точки зрения иерархии.Данные JSON OPW API представляются в формате словарного ключа: тип набора пары значений, ключи заключены в кавычки, может ли быть так, что мой декодер не находит необходимую информацию из-за кавычек?

Получение и декодирование вызова API ...

@IBAction func saveCityButtonPressed() {

    if let city = cityNameTextField.text {
        let weatherURL = URL(string: "https://api.openweathermap.org/data/2.5/weather?q=\(city)&APPID=8bad8461edbaf3ff50aa2f2fd8ad8a71&units=imperial")!

        let weatherResource = Resource<WeatherViewModel>(url: weatherURL) { data in
            let weatherVM = try? JSONDecoder().decode(WeatherViewModel.self, from: data)
            return weatherVM
        }
        Webservice().load(resource: weatherResource) { result in
        }
    }
}

ViewModel

struct WeatherListViewModel {
private var weatherViewModels = [WeatherViewModel]()
}

struct WeatherViewModel: Decodable {
let name: String
let main: TemperatureViewModel
}

struct TemperatureViewModel: Decodable {
let temp: Double
let temp_min: Double
let temp_max: Double
}

Пример данных JSON:

{
    "coord":{
       "lon":-0.13,
       "lat":51.51
    },
    "weather":[
        {
             "id":300,
             "main":"Drizzle",
             "description":"light intensity drizzle","icon":"09d"
        }
    ],
    "base":"stations",
    "main":{
        "temp":280.32,
        "pressure":1012,
        "humidity":81,
        "temp_min":279.15,
        "temp_max":281.15
     },
     "visibility":10000,
     "wind":{
         "speed":4.1,
         "deg":80
     },
     "clouds":{
         "all":90
     },
     "dt":1485789600,
     "sys":{
         "type":1,
         "id":5091,
         "message":0.0103,
         "country":"GB",
         "sunrise":1485762037,
         "sunset":1485794875
     },
     "id":2643743,
     "name":"London",
     "cod":200
 }

1 Ответ

1 голос
/ 27 апреля 2019

Ваше свойство WeatherViewModel city является строкой, но в вашем JSON нет ключа "city".

...