我想根據從JSON返回的數據更新一些標籤。下面是數據對象和更新JSON數據對象的功能:如何通過完成處理程序使用JSON結果更新UI?
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")
}
}
}
這裏就是我試圖更新UI:
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()
,但標籤仍然保持空白。 編輯:我注意到如果我在viewDidLoad中的完成塊內部放置一個斷點,它不會被調用。
沒有嘗試在主隊列更新標籤?使用:'DispatchQueue.main.async(execute:{})' –
我剛試過,它沒有工作 – SwiftyJD