We call startTimer function to start a timer. When we wanted to stop it we call stopTimerTest function but after we called stopTimer function the timerTestAction keeps firing. To check the timer condition we used print and print in timerActionTest returns nil.
var timerTest: Timer? = nil func startTimer () { timerTest = Timer.scheduledTimer( timeInterval: TimeInterval(0.3), target : self, selector : #selector(ViewController.timerActionTest), userInfo : nil, repeats : true) } func timerActionTest() { print(" timer condition \(timerTest)") } func stopTimerTest() { timerTest.invalidate() timerTest = nil }
invalidate() is correct for stopping timer.
Try to make the following changes to your code:
First, you have to change the way you declare timerTest
var timerTest : Timer?
then in startTimer
before instantiating check if timerTest
is nil
func startTimer () { guard timerTest == nil else { return } timerTest = Timer.scheduledTimer( timeInterval: TimeInterval(0.3), target : self, selector : #selector(ViewController.timerActionTest), userInfo : nil, repeats : true) }
Finally in your stopTimerTest
you invalidate timerTest
if it isn't nil
func stopTimerTest() { timerTest?.invalidate() timerTest = nil }
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