Martheli
Martheli

Reputation: 981

Cancel Swift Timer From Another Function

I am using a Swift Timer library found here. It allows you to run a timer and then stop it using the following syntax:

Timer.every(5.seconds) { (timer: Timer) in
    // do something

    if finished {
        timer.invalidate()
    }
}

I am trying to have the timer start and then have the option of the timer being cancelled from another function but I can't figure out how to reference the timer that is counting down from another function. I have tried doing something like this but it throws the following error:

Static member every cannot be used on instance of type Timer

   var countTimer = Timer()

        override func viewDidLoad() {
            super.viewDidLoad()

            initNotificationSetupCheck()

           countTimer.every(5.seconds) { //error here

        }

     func stopTimer() {

           countTimer.invalidate()

           }

Upvotes: 0

Views: 456

Answers (2)

Zig
Zig

Reputation: 2603

What if you were to use a mixture of both, but instead of creating an instance of Timer, assign the timer from inside the closure to your member variable like:

var countTimer: Timer
Timer.each(5.seconds) { timer in
    countTimer = timer
    //rest of code
}

Then you can invalidate the timer outside of the closure if needed.

Upvotes: 1

Mohammad Sadiq
Mohammad Sadiq

Reputation: 5241

You can go like this

self.timer = Timer.scheduledTimer(timeInterval: 5, target: self,
                                  selector: #selector(self.eventForTimer), userInfo: nil, repeats: true)

for cancelling timer

func cancelTimer() {
    self.timer.invalidate()
}

Upvotes: 0

Related Questions