微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

快速延迟后如何循环打印值

如何解决快速延迟后如何循环打印值

我想在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 举报,一经查实,本站将立刻删除。