为什么每次点击按钮时,每秒之间的时间间隔会变短?

Why do the time intervals between each second become shorter every time the button is clicked?

我成功地为单击按钮创建了一个计时器。单击第一个按钮时,时间间隔正好为一秒。但是当我按下另一个与相同 IBAction 功能配对的按钮时,时间间隔变短了。本质上,每按下一个按钮,时间间隔就会越来越短。

为什么会出现这种情况,我该如何解决?

import UIKit

class ViewController: UIViewController {
    //var eggTimes : [String: Int] = ["Soft": 5, "Medium":7, "Hard":12]
    
    let eggTimes = ["Soft": 300, "Medium":420, "Hard":720]
    var timer = 0;
    
    @IBAction func buttonClicked(_ sender: UIButton) {
        let hardness = sender.currentTitle!
        timer = eggTimes[hardness]!
        Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateCounter), userInfo: nil, repeats: true)
    }
    @objc func updateCounter(){
        if timer > 0 {
            print("\(timer) left for perfectly boiled egg!")
            timer -= 1
        }
    }
    
}

因为每次点击按钮,都会创建另一个计时器。

@IBAction func buttonClicked(_ sender: UIButton) {
    // ...
    Timer.scheduledTimer(//... makes a new timer
}

所以过了一会儿你有很多计时器,所有计时器都以随机间隔启动,并且全部触发。

所以想想会发生什么。例如,如果第二个计时器恰好在第一个计时器的中间时间创建,那么现在它们每半秒一起触发一次!等等。

Tap: x   x   x   x ... every second
Tap:       x   x   ... every second, on the half second
Tap:            x  ... every second, on the quarter second