Исходя из вашего кода:
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.clock), userInfo: nil, repeats: true)
Я бы предположил, что вы объявляете timer
в качестве переменной экземпляра в ViewController
что-то вроде:
class ViewController: UIViewController {
var timer: Timer?
@IBAction func tapped(_ sender: Any) {
timer?.invalidate()
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.clock), userInfo: nil, repeats: true)
}
@objc func clock() {
print("counting...")
}
}
Таким образом, каждое нажатиена кнопке будет запланирован новый сеанс синхронизации, даже если вы используете тот же экземпляр Timer
.В этом случае вы должны аннулировать timer
каждый раз, прежде чем присваивать ему Timer.scheduledTimer
:
Останавливает таймер из всехзапускается снова и запрашивает его удаление из цикла выполнения.
В методе действия кнопки добавьте timer?.invalidate()
в первом:
@IBAction func tapped(_ sender: Any) {
timer?.invalidate()
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.clock), userInfo: nil, repeats: true)
}