Быстрые данные о погоде из Openweathermap API? - PullRequest
0 голосов
/ 23 апреля 2020

С openweathermap api, я получаю ответ ниже.

{
  "cod":"200",
  "message":0,
  "cnt":40,
  "list":[
     {
        "dt":1587643200,
        "main":{
           "temp":289.78,
           "feels_like":283.61,
           "temp_min":289.03,
           "temp_max":289.78,
           "pressure":1014,
           "sea_level":1014,
           "grnd_level":1010,
           "humidity":41,
           "temp_kf":0.75
        },
        "weather":[
           {
              "id":804,
              "main":"Clouds",
              "description":"overcast clouds",
              "icon":"04d"
           }
        ],
        "clouds":{
           "all":94
        },
        "wind":{
           "speed":6.75,
           "deg":2
        },
        "sys":{
           "pod":"d"
        },
        "dt_txt":"2020-04-23 12:00:00"
     },
     {
        "dt":1587654000,
        "main":{
           "temp":289.66,
           "feels_like":284.44,
           "temp_min":289.34,
           "temp_max":289.66,
           "pressure":1013,
           "sea_level":1013,
           "grnd_level":1009,
           "humidity":47,
           "temp_kf":0.32
        },
        "weather":[
           {
              "id":803,
              "main":"Clouds",
              "description":"broken clouds",
              "icon":"04d"
           }
        ],
        "clouds":{
           "all":67
        },
        "wind":{
           "speed":5.9,
           "deg":357
        },
        "sys":{
           "pod":"d"
        },
        "dt_txt":"2020-04-23 15:00:00"
     }

Затем я пишу код ниже, чтобы получить данные о ветре для любого конкретного c дневного времени (дт). Я получаю jsonresponse в Any «список». Но я не могу получить данные о ветре. Я получаю error

«Значение типа« Любой »не имеет подписок».

Кроме того, я не могу понять, как я могу получить данные о ветре для dt=1587643200 и dt=1587654000 отдельно.

                           if let list = jsonresponse["list"] as? Any {
                               let wind = list["wind"] as? [String : Any],
                               print(wind)
                           }

1 Ответ

0 голосов
/ 23 апреля 2020

Это очень простой пример, этот вопрос похож на вашу проблему. Я хотел бы, чтобы вы узнали о Codable протоколе, чтобы упростить и улучшить ваш код, потому что этот способ очень жуткий.

let url = URL(string: "https://samples.openweathermap.org/data/2.5/history/city?id=2885679&type=hour&appid=b1b15e88fa797225412429c1c50c122a1")!
URLSession.shared.dataTask(with: url, completionHandler: {(data, response, error) in
    if let error = error {
        print(error.localizedDescription)
        return
    }

    guard let httpResponse = response as? HTTPURLResponse,
        (200...299).contains(httpResponse.statusCode) else {
            print("Error with the response, unexpected status code: \(String(describing: response))")
            return
    }

    guard let data = data else {
        return
    }

    guard let dictionaryObj = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] else {
        return
    }

    guard let list = dictionaryObj["list"] as? [[String: Any]] else {

        return
    }

    if let first = list.first, let wind = first["wind"] {
        print(wind)
    }
}).resume()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...