Swift - 防止计时器重复

Ale*_*ec. 4 xcode timer ios swift swift3

我有一个在 viewDidLoad 中运行的计时器

_ = Timer.scheduledTimer(timeInterval: 10,
                                   target: self,
                                   selector: #selector(timerFired),
                                   userInfo: nil,
                                   repeats: true)
Run Code Online (Sandbox Code Playgroud)

计时器工作正常,问题是因为 viewDidLoad 被多次调用,计时器重复。

有没有办法确保我的计时器只运行一次?

Jam*_*s P 6

您需要保留对计时器的引用,以便在 viewController 消失时使其无效。否则它只会继续运行,并且每次创建另一个 viewController 时都会产生新的计时器。

var timer:Timer?

override func viewDidLoad() {
        super.viewDidLoad()
        timer = Timer.scheduledTimer(timeInterval: 1,
                                 target: self,
                                 selector: #selector(timerFired),
                                 userInfo: nil,
                                 repeats: true)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewDidDisappear(animated)
    if let timer = timer {
        timer.invalidate()
    }
}
Run Code Online (Sandbox Code Playgroud)

根据您的导航逻辑viewWillDisappear在视图被解除分配之前可能会被多次调用,您必须自己决定处理这个问题的最佳方式。