Currently I am trying to Create a 3...2...1... Go! type of count down where right after Go! is stated an action occurs however the option to use the completion handler for Timer.scheduleTimer doesn't have the ability to countdown from what I understand?
As of now I can count down from 3 but don't know how to invalidate the timer at Go! and perform an action
var seconds = 3
var countDownTimer = Timer()
func startCountDown() {
  countDownTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(TrackActivityVC.updateTimer), userInfo: nil, repeats: true)
}
func updateTimer() {
  seconds -= 1
  print(seconds)
}
// Not sure how to use this code to create a countdown, as it doesn't seem possible with this method
Timer.scheduledTimer(withTimeInterval: someInterval, repeats: false) {
}
Thus the question is How to make count down timer with completion handler.
Here is how to create a countdown timer using the trailing closure syntax:
var seconds = 3
Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { timer in
    self.seconds -= 1
    if self.seconds == 0 {
        print("Go!")
        timer.invalidate()
    } else {
        print(self.seconds)
    }
}
Here is a better version that invalidates the timer when the viewController is deinitialized.  It uses [weak self] to avoid hanging on to the viewController if it closes:
class MyViewController: UIViewController {
    var seconds = 3
    var myTimer: Timer?
    func startCountdown() {
        myTimer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { [weak self] timer in
            self?.seconds -= 1
            if self?.seconds == 0 {
                print("Go!")
                timer.invalidate()
            } else if let seconds = self?.seconds {
                print(seconds)
            }
        }
    }
    deinit {
        // ViewController going away.  Kill the timer.
        myTimer?.invalidate()
    }
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With