Очень распространенная ошибка: вы создаете локальный таймер, который не совпадает с объявленным свойством.
Замените
let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
print(self.seconds)
self.updateTimer()
} // this is the timer that doesn't work no matter what I try :(
на
self.timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
print(self.seconds)
self.updateTimer()
} // this is the timer that doesn't work no matter what I try :(
self
до timer
фактически не является обязательным.
И установите таймер на nil
после аннулирования, чтобы избежать цикла сохранения
if seconds < 1 {
timer?.invalidate()
timer = nil
}
С другой стороны, вы можете использовать локальный таймер путем удаления свойства и изменения кода на
Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
print(self.seconds)
self.updateTimer(timer)
}
func updateTimer(_ timer : Timer) {
if seconds < 1 {
timer.invalidate()
} else {
seconds -= 1 //This will decrement(count down)the seconds.
dreadline.stringValue = "Dreadline: " + timeString(time: TimeInterval(seconds)) //This will update the label.
}
}