为什么此 Timer/RunLoop 代码有效?不应该

Why does this Timer/RunLoop code work? It shouldn’t

class A: Timer {
    var myTimer: Timer!
}

class TimerTestViewController: UIViewController {
    var a = A()

    override func viewDidLoad() {
        super.viewDidLoad()
        a.myTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(timerRun), userInfo: nil, repeats: true)
        RunLoop.current.add(a, forMode: RunLoop.Mode.common)

        a.myTimer.fire()
    }
}

请注意 RunLoop.current.add(a, forMode: .common) 我没有将 a.myTimer 添加到 runloop,而是“不小心”将 a 添加到 runloop。

为什么这段代码有效?

scheduledTimer 已经将 Timer 添加到 RunLoop,这就是为什么下一行甚至不需要。

Timer.scheduledTimer(timeInterval:target:selector:userInfo:repeats:)

Creates a timer and schedules it on the current run loop in the default mode.

第二行以 a 传递,只是因为您已将 A 声明为 Timer,这可能是一个错误:

// A should not be a Timer!
class A: Timer {