【发布时间】:2019-08-08 01:54:07
【问题描述】:
我尝试使用服务器响应更新 label.text。但标签仅在第二次调用方法后更新。怎么了?
dispatch_async(dispatch_get_main_queue()) 已弃用。我将其更改为 DispatchQueue.main.async,但它不起作用。
快速 2 的示例: Swift changing text of a label after downloading content of a web page
不工作的代码:
@IBAction func buttonAction(_ sender: Any) {
let url = URL(string: "https://api.nasa.gov/planetary/apod?date=2005-2-22&api_key=DEMO_KEY")!
let task = URLSession.shared.dataTask(with: url) { [weak self] (data, response, error) in
if let data = data,
let stringData = String(data: data, encoding: .utf8) {
print("stringData: \(stringData)") // prints every time
DispatchQueue.main.async {
// change label text after second calling.
// ??? How to change label text at first calling ???
self?.mainLabel.text = stringData
}
}
}
task.resume()
}
【问题讨论】:
-
第一次调用时检查
mainLabel是否为nil? -
mainLabel != 无。它是 IBOutlet
标签: swift closures uilabel swift4 urlsession