gpt4 book ai didi

swift - 在循环内的 swift 3 中创建延迟

转载 作者:搜寻专家 更新时间:2023-11-01 05:48:40 25 4
gpt4 key购买 nike

我知道我可以使用以下语法 (How to program a delay in Swift 3) 在 Swift 3 中延迟部分代码:

let when = DispatchTime.now() + 2 // change 2 to desired second delay.
DispatchQueue.main.after(when: when) {
// run your code with delay
}

或类似的帖子:How to create dispatch queue in Swift 3

但是这些不是我可以使用的延迟方法。我需要在循环中插入延迟。例如,假设有一个标签组件和一个按钮。当我点击按钮时,我希望标签连续显示循环变量:

@IBOutlet weak var showIntegers: UILabel!

@IBAction func countNums(_ sender: AnyObject) {

for i in 1...5 {
showIntegers.text = String(i)
//delay code here, sleep(1) doesn't work
}
}

我使用 sleep 作为延迟,但应用程序 sleep 5 秒然后显示 5。我无法连续看到 1、2、3、4 和 5,延迟 1 秒。

我也不知道如何在循环内使用 DispatchQueue 类。提前感谢您的帮助。

最佳答案

sleep 将不起作用,因为 GUI 需要一些时间才能更新,但您会在更新标签后立即让主队列休眠。在此期间,您的应用程序将没有响应,标签只会从 0 跳到 5,偶尔会发生一些变化。

改为使用 Grand Central Dispatch async_after(在 Swift 2 中曾经是 dispatch_after):

@IBAction func countNums(_ sender: AnyObject) {
for i in 1...5 {
// Always update your GUI on the main thread
DispatchQueue.main.asyncAfter(deadline: .now() + Double(i)) {
self.showIntegers.text = "\(i)"
}
}
}

关于swift - 在循环内的 swift 3 中创建延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39207398/

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