Библиотека Foundation содержит класс Timer
, с которым вы можете ознакомиться с документацией для здесь .
. Он предоставляет API для увольнения по истечении определенного времени.Метод конструктора, который вы хотите использовать:
class func scheduledTimer(withTimeInterval: TimeInterval, repeats: Bool, block: (Timer) -> Void) -> Timer
(потому что другая версия использует селекторы, и кто хочет писать kludgy Objective-C, когда они пишут Swift, если они могутизбежать этого?)
Итак, например, допустим, у вас есть
- метка
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)