Swift:延迟递增标签



我的应用程序在到达代码的这一部分时冻结。我正在尝试以半秒的延迟递增一个数字,然后将其打印到屏幕上。因此,标签文本将变为 1,然后是 2,然后是 3,依此类推。我把这段代码扔进了操场,DispatchQueue似乎无限上升。谢谢。

var percentage = 0
func incrementLabel (amount: Int){
    var count = 0
    while count <= amount{
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: {
            percentage += 1
            count += 1
        })
    }
}
incrementLabel(amount: 10)
print(percentage)

> 这是一个替代解决方案,您可以使用它代替DispatchQueue

var percentage = 0
var counter = 0
var timer: Timer?
func incrementLabel(amount: Int) {
    counter = amount
    timer = Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(self.updateDelay), userInfo: nil, repeats: true)
}
@objc func updateDelay() {
    if (counter > 0) {
        counter -= 1
        percentage += 1
    } else {
        timer.invalidate()
        timer = nil
    }
}
incrementLabel(amount: 10)
print(percentage)

这在 Swift 中使用了Timer

最新更新