У меня есть функция 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,Я вижу, что все значения есть. Поэтому я считаю, что это все еще асинхронная проблема. Спасибо за любую помощь.