JSONから返されたデータに基づいていくつかのラベルを更新しようとしています。今のviewDidLoadが呼ばれたときのようJSON結果を使用して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)
})
})
:私は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")
}
}
}
されています。ここでは、データオブジェクトとJSONデータオブジェクトを更新する機能がありますラベルは空白ですが、完成ブロックの最後にself.view.setNeedsDisplay()
を追加しようとしましたが、ラベルはまだ空白のままです。 編集:それは呼び出されていないviewDidLoadで完了ブロック内にブレークポイントを置く場合気づいた。
あなたがメインキューにラベルを更新してみたのですか? –
私はちょうど試してみましたが、うまくいきませんでした – SwiftyJD