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
,但“偶然地”向运行循环中添加了a
。
为什么这些代码完全起作用?
答案 0 :(得分:3)
scheduledTimer
已将Timer
添加到RunLoop
中,这就是为什么甚至不需要下一行的原因。
请参见Timer.scheduledTimer(timeInterval:target:selector:userInfo:repeats:)
创建一个计时器,并在默认模式下将其安排在当前运行循环中。
第二行仅通过a
传递是因为您已将A
声明为Timer
,这可能是错误的:
// A should not be a Timer!
class A: Timer {