从正在运行的计时器更新标签变量

时间:2018-10-23 11:09:40

标签: swift timer label

我正在尝试创建一个在计时器达到零时执行简单数学运算的计数器。我的计时器工作正常,标签显示了原始变量,但是由于计时器达到“零”,它们没有更新。我的代码哪里出问题了?

{{1}}

2 个答案:

答案 0 :(得分:0)

我认为,当您添加let时,您的问题就解决了。删除var timer = Timer()。没必要

func runTimer() {
    let timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTimer),userInfo: nil, repeats: true)
}

答案 1 :(得分:0)

您的主要问题是您没有致电updateLabels来更新标签。

我建议使用属性观察器(didSet)在值更改时设置标签,而不要依赖单独的函数来更改它们。

此外,您需要在计时器处理程序中调用increaseGold

class ViewController: UIViewController {

    @IBOutlet weak var timerLabel: UILabel!
    @IBOutlet weak var goldCounter: UILabel!
    @IBOutlet weak var turnCounter: UILabel!

    var seconds = 15 {
        didSet {
            timerLabel.text = String(seconds)
        }
    }

    var timer = Timer()

    var gold = 1000 {
        didSet {
            goldCounter.text = String(gold)
        }
    }

    var turns = 1 {
        didSet {
            turnCounter.text = String(turns)
        }
    }

    func runTimer() {
        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTimer),userInfo: nil, repeats: true)
    }

    @objc func updateTimer() {
        seconds -= 1
        if seconds == 0 {
            seconds = 15
        }
        increaseGold()
    }

    func increaseGold () {
        if seconds == 1 {
            gold = gold + 1000
            turns = turns + 1
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        seconds = 15
        gold = 1000
        turns = 1
        self.runTimer()
    }
}