如何解决快速延迟后如何循环打印值
我想在5秒延迟后循环打印我的值 我就是这么做的
let count = 1...10
for calls in count{
let seconds = 5
dispatchQueue.main.asyncAfter(deadline: .Now() + .seconds(seconds),execute: {
print(calls)
})
}
但是它仅在第一次等待5秒钟,然后一次打印所有值。 也许有另一种方法可以在延迟一段时间后多次调用函数
这是我尝试使用计时器的方式
var seconds = 10
var timer = Timer()
override func viewDidLoad() {
super.viewDidLoad()
let count = 1...10
for number in count{
timer = Timer.scheduledTimer(timeInterval: 1,target: self,selector: #selector(ViewController.counter),userInfo: nil,repeats: true)
print(number)
}
}
@objc func counter(){
seconds -= 1
if (seconds == 0){
print("User Location")
}
}
}
解决方法
两项批评。 Forst,不要使用循环-它会立即执行。其次,使用线程,没有必要。请改用Timer
:
class ViewController: UIViewController {
var timer = Timer()
var iterations = 0
override func viewDidLoad() {
super.viewDidLoad()
timer = Timer.scheduledTimer(timeInterval: 5.0,target: self,selector: #selector(printTime),userInfo: nil,repeats: true)
}
@objc func printTime() {
print(Date())
iterations += 1
if iterations == 5 {
timer.invalidate()
}
}
}
其输出:
2020-08-15 18:08:38 +0000
2020-08-15 18:08:43 +0000
2020-08-15 18:08:48 +0000
2020-08-15 18:08:53 +0000
2020-08-15 18:08:58 +0000
5次迭代后,您将关闭时间无效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。