Как я могу использовать завершение, чтобы добавить элемент в массив? - PullRequest
0 голосов
/ 23 мая 2019

У меня есть функция getJson, которую я использую для анализа json из URLSession в массив HouseDetails.

func getJson(completion: @escaping ([HouseDetails]?, Error?) -> Void) {
    var result: [HouseDetails] = []
    let jsonUrlString = "https://data.melbourne.vic.gov.au/resource/i8px-csib.json"

    guard let url = URL(string: jsonUrlString)
        else { return }

    URLSession.shared.dataTask(with: url) { (data, response, error) in
        guard let data = data else { return }

        if let error = error {
            DispatchQueue.main.async {
                completion(nil, error)
            }
            return
        }

        do {
            let houses = try JSONDecoder().decode([HouseDetails].self, from: data)

            for h in houses {
                result.append(h)
            }

            DispatchQueue.main.async {
                completion(result, error)
            }
        }
        catch let jsonErr {
            print("Error with json serialization", jsonErr)
        }

        }.resume()
}

Затем я вызываю эту функцию из главной функции viewDidLoad () здесь:

getJson { (x, error) in
        guard let x = x, error == nil else {
            return
        }
        hsArray = x
    }

Однако, когда я присваиваю hsArray (который является глобальным массивом [HouseDetails] для ответа), к нему ничего не добавляется. Еще раз, если я перебираю переменную "x", где я вызываю getJson,Я вижу, что все значения есть. Поэтому я считаю, что это все еще асинхронная проблема. Спасибо за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...