Я пытаюсь обновить некоторые метки на основе данных, возвращенных из JSON. Вот данные объекты и функции для обновления объектов JSON данных:Как обновить интерфейс с помощью результата JSON через обработчик завершения?
class sampleJSON {
var airbnbUS: Int?
var airbnbLocal: Int?
init(airbnbUS: Int, airbnbLocal: Int?) {
self.airbnbUS = airbnbUS
self.airbnbLocal = airbnbLocal
}
//Used to download data to local objects using the network service manager
static func downloadAllData(urlExtension: String, completionHandler: @escaping (sampleJSON?) ->()) {
let usm = UrlSessionNetworkManager.sharedManager
if let jsonDictionary = usm.parseJSONFromData(urlExtension:"\(urlExtension)")
{
if let resultsDictionary = jsonDictionary["result"] as? [[String : Any]]?{
let costDictionary = resultsDictionary?[0]
let cost = costDictionary?["cost"] as? [String: Any]
if let airbnb = cost?["airbnb_median"] as? [String: AnyObject]{
let airbnbUS = airbnb["USD"] as! Int
let airbnbLocal = airbnb["CHF"] as! Int
sampleJSON(airbnbUS: airbnbUS, airbnbLocal: airbnbLocal)
}
}
} else {
print("Error: Cannot retrieve JSON Data")
}
}
}
Вот где я пытаюсь обновить пользовательский интерфейс:
var JSON: sampleJSON?
override func viewDidLoad() {
super.viewDidLoad()
sampleJSON.downloadAllData(urlExtension:"cities/basel-switzerland",completionHandler: {_ in
DispatchQueue.main.async(execute: {
self.topLabel.text = String(describing: self.JSON?.airbnbUS)
self.lowerLabel.text = String(describing: self.JSON?.airbnbLocal)
})
})
Как прямо сейчас, когда viewDidload называется ярлыки пустые, я попытался добавить self.view.setNeedsDisplay()
в конец блока завершения, но метки все еще остаются пустыми. EDIT: Я заметил, что если поставить точку останова внутри блока завершения в viewDidLoad, это не вызвано.
сделал попытку обновления метки на главную очереди? Использование: 'DispatchQueue.main.async (execute: {})' –
Я просто попробовал, он не работал – SwiftyJD