Swift 计时器
在开发移动应用程序时,有时需要安排一些任务在将来发生。Swift提供了一个计时器类,我们可以在一定时间间隔后执行任务。
在这篇文章中,我们将讨论如何使用swift计时器来安排任务。同时,我们还将讨论如何使用重复和非重复计时器。
下面的代码创建并运行了一个重复计时器。
let timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(fireTimer), userInfo: nil, repeats: true)
上述代码要求在同一类中定义一个@objc方法fireTimer()。
@objc func fireTimer(){
debugPrint("Timer fired")
}
在这里,我们已经将定时器设置为每1秒执行一次。因此,fireTimer()方法将每1秒被调用一次。然而,在创建重复定时器时,Swift允许我们定义闭包,如下所示。
let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { (timer) in
debugPrint("Timer fired")
}
两个初始化方法都用于返回创建的计时器。然而,我们可以将返回值存储在属性中,以便稍后可以使其无效。
创建非重复计时器
如果我们只想运行代码一次,就需要创建非重复计时器。为此,我们需要在创建计时器时将repeats属性更改为false。
let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { (timer) in
debugPrint("Timer fired")
}
结束一个计时器
我们可以通过调用计时器对象的invalidate()方法来结束一个已存在的计时器。考虑以下示例,它每秒钟运行一次代码,共运行四次,然后使计时器失效。
var count = 0
let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { (timer) in
debugPrint("Timer fired")
count = count + 1
if(count == 4){
timer.invalidate()
}
}
它在控制台上打印以下输出。
"Timer fired"
"Timer fired"
"Timer fired"
"Timer fired"
以上示例中,我们在创建计时器时使用了闭包。我们也可以在这里使用方法的方式。但是,在方法中无效化计时器对象如下所示。
class TimerExample:NSObject{
var count = 0
let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(fireTimer), userInfo: nil, repeats: true)
@objc func fireTimer(){
debugPrint("Timer Fired")
count = count + 1
if(count == 4){
timer.invalidate()
}
}
}