Foundation 库包含一个 Timer 类,您可以阅读 here 的文档。
它提供了一个 API,用于在经过一定时间后启动工作。您要使用的构造方法是:
class func scheduledTimer(withTimeInterval: TimeInterval, repeats: Bool, block: (Timer) -> Void) -> Timer
(因为其他版本使用选择器,谁想在写 Swift 时写笨拙的 Objective-C,如果他们可以避免的话?)
所以,举个例子,假设你有
- 标签
secondsLeftLabel 显示剩余秒数
- 一个函数
timesUp() 完成后你想调用它
首先,您需要创建一个计时器属性和一个 secondsLeftInTimer 属性:
private var timer: Timer?
private var secondsLeftInTimer: Double = 0
然后你可以实现这样的函数:
func setUpTimer(numberOfSeconds: Double) {
secondsLeftInTimer = numberOfSeconds
timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { [weak self] (_) in
self?.secondElapsed()
}
}
你会看到我创建了一个辅助函数,你会实现这样的东西:
func secondElapsed() {
secondsLeftInTimer -= 1
secondsLeftLabel.text = "\(secondsLeftInTimer) seconds left"
if secondsLeftInTimer <= 0 {
timer.invalidate()
timer = nil
timesUp()
}
}
另外,如果您希望该功能只占用整秒,您还可以像这样修改前两行:
func setUpTimer(numberOfSeconds: Int) {
secondsLeftInTimer = Double(exactly: numberOfSeconds)