我知道我可以使用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类.感谢您的帮助.
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)
| 归档时间: |
|
| 查看次数: |
4294 次 |
| 最近记录: |