📅  最后修改于: 2021-01-11 08:03:41             🧑  作者: Mango
在Swift中,计时器用于创建重复任务以延迟安排工作。这是一个以前称为NSTimer的类。 Swift的计时器类提供了一种灵活的方式来安排将来一次或重复进行的工作。
让我们看看如何使用运行循环来创建重复和不重复的计时器,跟踪计时器,以及如何减少其对能源和电力的影响。
我们可以使用以下语法创建并启动重复计数器:
let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(fireTimer), userInfo: nil, repeats: true)
让我们看一个示例来演示如何创建重复计数器:
let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(fire), userInfo: nil, repeats: true)
@objc func fire()
{
print("FIRE!!!")
}
在上面的示例中,
在此示例中,使用5个参数创建计时器。
要创建一个非重复计时器,您只需将repeats参数设置为false即可。计时器只会触发一次,并在之后立即自动失效。
let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(fire), userInfo: nil, repeats: false)
@objc func fire()
{
print("FIRE!!!")
}
注意:上面的代码必须在类上下文中运行,例如在视图控制器类中。 fire()函数是类的一部分,而self则引用当前的类实例。
let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { timer in
print("FIRE!!!")
})
在上面的代码中,最后一个参数块带有一个闭包。闭包本身具有一个参数计时器。
在这里,使用@objc属性是因为它使fire()函数在Objective-C中可用。 Timer类是Objective-C运行时的一部分,这就是我们使用该@objc属性的原因。
您必须指定计时器在创建时是重复还是不重复。重复计时器和不重复计时器之间的主要区别是:
非重复计时器会触发一次,然后自动使其自身无效,因此,它将阻止计时器再次触发。
重复计时器触发,然后在同一运行循环上重新安排自身的时间。重复计时器始终根据计划的点火时间进行调度,而不是实际的点火时间。
例如,如果计划将计时器在特定时间触发,然后每隔10秒触发一次,则即使实际触发时间被延迟,计划的触发时间也将始终落在原始的10秒时间间隔内。