使用后台线程中的数据进行UI更新时遇到困难.我阅读了大量的文档,但仍然遗漏了一些东西......
func getData(){
DispatchQueue.global(qos: .background).async {
let token = GetTokenOperation()
token.success = { item in
print("Success")
}
token.failure = {error in
print(error.localizedDescription)
}
NetworkQueue.shared.addOperation(op: token)
DispatchQueue.main.async {
// qos' default value is ´DispatchQoS.QoSClass.default`
self.updateUI()
}
}
}
Run Code Online (Sandbox Code Playgroud)
self.updateUI()在打印"成功"之前执行.当我把self.updateUI()放在闭包token.success中时,它确实崩溃了.
我测试了大量的样品,但没有一个适合我.这是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(frame: CGRect(x: 100, y: 100, width: 200, height: 50))
button.backgroundColor = .green
button.setTitle("Test Button", for: .normal)
button.titleLabel?.sizeToFit()
button.addTarget(self, action: #selector(ViewController.buttonTapped(_:)), for: .touchUpInside)
self.view.addSubview(button)
}
func buttonTapped(_ sender: UIButton) {
print("Button tapped.")
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?