我正在尝试根据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")
}
}
}
这是我正在尝试更新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中的完成块中放置一个断点,它就不会被调用。
答案 0 :(得分:4)
您永远不会在.command("customer1 <place> [language]","Create a customer directory")
内调用您的完成处理程序,因此它的闭包将永远不会执行以设置您的标签。
代替您创建downloadAllData
并且不对其执行任何操作的行:
sampleJSON
在sampleJSON(airbnbUS: airbnbUS, airbnbLocal: airbnbLocal)
内返回sampleJSON
:
completionHandler