Сохранение ответа JSON как переменной вне исходной функции с Alamofire и Swift - PullRequest
0 голосов
/ 21 марта 2020

Я прошу прощения за то, что я представляю, это очень простой вопрос, однако я новичок в кодировании и, похоже, сам не могу справиться с этим. Ниже у меня есть код для получения и анализа некоторых JSON, которые я получил с помощью AlamoFire (также с небольшой помощью с этого сайта).

func distanceMatrix() {
        let myOrigin = startLocationTFText
        let myDestination = destinationLocationTFText

        let url = "https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=\(myOrigin)&destinations=\(myDestination)&key=API_KEY"

        let encodedUrl = url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)

        AF.request(encodedUrl!).responseJSON { response in
            print(response.request as Any)
            print(response.response as Any)
            print(response.data as Any)
            print(response.result as Any)

            let decoder = JSONDecoder()
            decoder.keyDecodingStrategy = .convertFromSnakeCase

            guard let json = try? decoder.decode(RootResponse.self, from: response.data!) else { print("Unable to parse JSON"); return }

            print(json)
            print(json.rows.first?.elements.first?.distance.text as Any)
            print(json.rows.first?.elements.first?.duration.text as Any)
        }
    }

В конечном счете, я хотел бы сохранить напечатанный код в переменных для использования в моем проекте. Я пробовал несколько методов, но ни один из них не работал из-за различных причин, таких как область действия и, как я предполагаю, асин c природа Alamofire.

Пожалуйста, смотрите ниже код JSON, который я получаю если это также поможет:

{
   "destination_addresses" : [ "30 Rockefeller Plaza, New York, NY 10112, USA" ],
   "origin_addresses" : [ "352 7th Ave, New York, NY 10001, USA" ],
   "rows" : [
      {
         "elements" : [
            {
               "distance" : {
                  "text" : "1.7 mi",
                  "value" : 2729
               },
               "duration" : {
                  "text" : "15 mins",
                  "value" : 887
               },
               "status" : "OK"
            }
         ]
      }
   ],
   "status" : "OK"
}

Любая помощь очень ценится, и, пожалуйста, дайте мне знать, если необходимы дополнительные разъяснения.

...