Ios 更新UILabel Swift

Ios 更新UILabel Swift,ios,swift,uilabel,Ios,Swift,Uilabel,我在更新标签时遇到问题,在互联网上似乎找不到任何解决方案。我需要的标签更新,一旦其文本的变化。我只是用一个简单的观察者 var updateLabel: String = "" { didSet { label.text = updateLabel //This doesn't update print(updateLabel) //This Prints } } var count: Int? = 0 while (coun

我在更新标签时遇到问题,在互联网上似乎找不到任何解决方案。我需要的标签更新,一旦其文本的变化。我只是用一个简单的观察者

var updateLabel: String = "" {
    didSet { 
        label.text = updateLabel  //This doesn't update
        print(updateLabel)        //This Prints
    }
}

var count: Int? = 0

while (count! < 1000000) {
    count!++
    updateLabel = "\(count!)"
}

默认情况下,控件不会立即更新,但会在下次运行循环中更新

因为你循环了一百万次,所以你阻止了更新,而你试图对UI所做的那些更改中的9999999甚至不会被应用

在运行循环得到控制之前,您对UI所做的最后更改不会提交


另外,调用
setNeedsDisplay
只会让系统知道标签需要在下一次运行循环中更新。它不会像你想的那样立即更新。但这确实是多余的,因为更改标签的文本已经将标签标记为需要更新。

默认情况下,控件不会立即更新,而是在下次运行循环中更新

因为你循环了一百万次,所以你阻止了更新,而你试图对UI所做的那些更改中的9999999甚至不会被应用

在运行循环得到控制之前,您对UI所做的最后更改不会提交


另外,调用
setNeedsDisplay
只会让系统知道标签需要在下一次运行循环中更新。它不会像你想的那样立即更新。但这确实是多余的,因为更改标签的文本已经将标签标记为需要更新。

有解决办法吗?有可能在当前运行循环中更新它吗?@HovyTech很明显,屏幕的刷新率是有限制的。。。但是您可能需要设置一个
CADisplayLink
,计算更新之间的持续时间,并相应地增加变量。这样标签就会随着跑步循环而更新。我认为你可以创建自己的跑步循环并自己管理,probs bestsolution@originaluser2正是以这种方式使用
CADisplayLink
。@HovyTech更好的问题可能是如何在后台而不是在主线程上运行耗时的操作。但是如果你打算这样做,你看,有没有工作可以做?有可能在当前运行循环中更新它吗?@HovyTech很明显,屏幕的刷新率是有限制的。。。但是您可能需要设置一个
CADisplayLink
,计算更新之间的持续时间,并相应地增加变量。这样标签就会随着跑步循环而更新。我认为你可以创建自己的跑步循环并自己管理,probs bestsolution@originaluser2正是以这种方式使用
CADisplayLink
。@HovyTech更好的问题可能是如何在后台而不是在主线程上运行耗时的操作。但如果你打算这样做,请看。听起来你可能想在数字变化时设置动画。你可能想回顾一下开源的实现(或者仅仅是使用开源)。好主意。我使用了它和变体,效果很好。计数只是一个简单的例子,它给了我与原始代码相同的问题。听起来你可能想在数字变化时设置动画。你可能想回顾一下开源的实现(或者仅仅是使用开源)。好主意。我使用了它和变体,结果非常好。计数只是一个简单的例子,它给了我与原始代码相同的问题。
dispatch_async(dispatch_get_main_queue()) {
}

setNeedsDisplay()