在循环中创建swift 3的延迟

Gra*_*eme 1 swift swift3

我知道我可以使用followign语法(如何编写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
}
Run Code Online (Sandbox Code Playgroud)

或者类似的帖子:如何在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
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用睡眠作为延迟但是然后应用程序睡眠5秒然后显示5.我连续1秒钟看不到1,2,3,4和5.

我也弄清楚如何在循环中使用DispatchQueue类.感谢您的帮助.

Cod*_*ent 7

sleep将无法正常工作,因为GUI需要一些时间进行更新,但您在更新标签后立即将主要队列暂停.您的应用程序在此期间将无响应,标签将从0跳到5,偶尔会有一些变化.

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

@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)"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)