从后台线程更新主视图-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

当我按下一个按钮时,我会开始一个计算循环,并且需要能够在进行时更新主视图。因为这是一个后台线程,所以在调用完成之前屏幕不会更新。我如何在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];

有什么想法吗?

@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)"
            }
        }
    }
}

我看了那个帖子-我会再看一遍-谢谢。我看了那个帖子-我会再看一遍-谢谢。我看了那个帖子-我会再看一遍-谢谢。我看了那个帖子-我会再看一遍-谢谢。非常感谢-看起来像这样。当我回到家的时候,我会在一台机器前进行测试。这非常有效,设置两层是有意义的。谢谢。非常感谢——看起来是这样。当我回到家的时候,我会在一台机器前进行测试。这非常有效,设置两层是有意义的。谢谢。非常感谢——看起来是这样。当我回到家的时候,我会在一台机器前进行测试。这非常有效,设置两层是有意义的。谢谢。非常感谢——看起来是这样。当我回到家的时候,我会在一台机器前进行测试。这非常有效,设置两层是有意义的。非常感谢。