0

下面是让计时器将变量从 0 更改为 1 的代码,这会在计时器尝试触发时导致 SIGABRT 错误:

var timerToggle = 0

    let timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(fireTimer), userInfo: nil, repeats: false)

    @objc func fireTimer() {
        timerToggle = 1
    }

我知道其他遇到此问题的人似乎通过将计时器声明放在override func viewDidLoad()函数中来解决它,但是每当我这样做时,它都会给我以下错误

“从未使用过不可变值'timer'的初始化;考虑用赋值替换'_'或删除它。”

任何帮助将不胜感激

4

3 回答 3

0

如果需要在 中激活一次触发的计时器viewDidLoad,它应该看起来像下面这样

class MyController: UIViewController {
    var timerToggle = 0

    private var timer: Timer?

    deinit {
        timer?.invalidate()
    }

    @objc func fireTimer() {
        timerToggle = 1
        timer = nil
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, 
            selector: #selector(fireTimer), userInfo: nil, repeats: false)
    }
}
于 2020-01-14T16:32:41.103 回答
0

如果您不再打算访问计时器,只需在下面添加 viewDidLoad

_ = Timer.scheduledTimer(timeInterval: 5.0, 
                         target: self, 
                         selector: #selector(fireTimer), 
                         userInfo: nil, 
                         repeats: false)
于 2020-01-14T17:36:50.413 回答
0

“从未使用过不可变值'timer'的初始化;考虑用赋值替换'_'或删除它。” 这只是一个警告而不是错误。您仍然可以继续在 viewDidLoad 中初始化计时器。

于 2020-01-14T10:04:20.273 回答