gpt4 book ai didi

swift - 从后台线程更新主视图 - Swift

转载 作者:行者123 更新时间:2023-11-28 11:16:35 24 4
gpt4 key购买 nike

当我按下一个按钮时,我开始了一个计算循环,并且需要能够随着它的进行更新主视图。由于这是一个后台线程,屏幕在调用完成之前不会更新。我如何在 Swift 中实现这一目标?这是我目前的简化方法,但行不通。

@IBAction func calculatePower(sender: AnyObject) {
for day in 1...365 {
dispatch_async(dispatch_get_main_queue()) {
self.dayLabel.text = "\(day)"
}
}
}

我通常会在循环中添加一些 0,否则它会很快完成从 1 到 365 的过程。

在 Cocoa 中我会使用这样的语句:

[self performSelectorOnMainThread:@selector(updateDisplayEnergySunEquator:) withObject:[NSNumber numberWithDouble:distanceFromSun] waitUntilDone:YES];

有什么想法吗?

最佳答案

@IBAction 函数在按下按钮时在主线程中调用。发生的情况是你的闭包在主线程上排队,但你的主线程正忙于处理你的循环。基本上,您是在一个线程中执行异步工作。

要在另一个线程上运行循环,将其包装在 dispatch_async 中并使用另一个队列。

@IBAction func calculatePower(sender: AnyObject) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
for day in 1...365 {
dispatch_async(dispatch_get_main_queue()) {
self.dayLabel.text = "\(day)"
}
}
}
}

关于swift - 从后台线程更新主视图 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31376387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com