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()
}
}
}
在打印“成功”之前执行self.updateUI()。当我把self.updateUI()放在闭包token.success中时,它确实崩溃了。
答案 0 :(得分:6)
你试过这个吗?
token.success = { item in
print("Success")
DispatchQueue.main.async {
self.updateUI()
}
}
答案 1 :(得分:0)
就我而言,我需要在后台模式下更新UI。我是一个UIProgressView和计时器。虽然很耗时,但我更新了进度视图以显示剩余时间。但是,当用户单击“主页”按钮时,应用程序将进入免费模式,UI不会更新。为解决此问题,我将DispatchQueue与.background选项一起使用。
DispatchQueue.global(qos: .background).async {
DispatchQueue.main.async {
let fractionalProgress = Float(self.counter) / 60.0
let animated = self.counter != 0
self.barProgress.setProgress(fractionalProgress, animated: animated)
}
}
我希望这会对某人有所帮助。