从后台线程更新主视图-Swift
当我按下一个按钮时,我会开始一个计算循环,并且需要能够在进行时更新主视图。因为这是一个后台线程,所以在调用完成之前屏幕不会更新。我如何在Swift中实现这一点?这是我目前的简化方法,但不起作用从后台线程更新主视图-Swift,swift,grand-central-dispatch,dispatch,Swift,Grand Central Dispatch,Dispatch,当我按下一个按钮时,我会开始一个计算循环,并且需要能够在进行时更新主视图。因为这是一个后台线程,所以在调用完成之前屏幕不会更新。我如何在Swift中实现这一点?这是我目前的简化方法,但不起作用 @IBAction func calculatePower(sender: AnyObject) { for day in 1...365 { dispatch_async(dispatch_get_main_queue()) { self.dayLabel.t
@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];
有什么想法吗?@iAction函数在按下按钮时在主线程中被调用。发生的情况是,闭包在主线程上排队,但主线程正忙于处理循环。基本上,您是在一个线程内执行异步工作 要在另一个线程上运行循环,请将其包装在
dispatch\u 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)"
}
}
}
}
@按下按钮时,将在主线程中调用iAction函数。发生的情况是,闭包在主线程上排队,但主线程正忙于处理循环。基本上,您是在一个线程内执行异步工作 要在另一个线程上运行循环,请将其包装在
dispatch\u 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)"
}
}
}
}
@按下按钮时,将在主线程中调用iAction函数。发生的情况是,闭包在主线程上排队,但主线程正忙于处理循环。基本上,您是在一个线程内执行异步工作 要在另一个线程上运行循环,请将其包装在
dispatch\u 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)"
}
}
}
}
@按下按钮时,将在主线程中调用iAction函数。发生的情况是,闭包在主线程上排队,但主线程正忙于处理循环。基本上,您是在一个线程内执行异步工作 要在另一个线程上运行循环,请将其包装在
dispatch\u 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)"
}
}
}
}
我看了那个帖子-我会再看一遍-谢谢。我看了那个帖子-我会再看一遍-谢谢。我看了那个帖子-我会再看一遍-谢谢。我看了那个帖子-我会再看一遍-谢谢。非常感谢-看起来像这样。当我回到家的时候,我会在一台机器前进行测试。这非常有效,设置两层是有意义的。谢谢。非常感谢——看起来是这样。当我回到家的时候,我会在一台机器前进行测试。这非常有效,设置两层是有意义的。谢谢。非常感谢——看起来是这样。当我回到家的时候,我会在一台机器前进行测试。这非常有效,设置两层是有意义的。谢谢。非常感谢——看起来是这样。当我回到家的时候,我会在一台机器前进行测试。这非常有效,设置两层是有意义的。非常感谢。