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

标签 swift timer label

我正在尝试创建一个计数器,当计时器达到零时,它会执行简单的数学运算。我的计时器工作得有点正确,标签显示原始变量,但当计时器达到“零”时它们不会更新。我的代码哪里出错了?

    class ViewController: UIViewController {


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

    var seconds = 15
    var timer = Timer()
    var gold = 1000
    var turns = 1



    func updatelabels () {
    goldCounter.text = String(gold)
    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
        timerLabel.text = String(seconds)
        if seconds == 0 {
            seconds = 15}
        }


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

override func viewDidLoad() {
        super.viewDidLoad()
        self.runTimer()
        goldCounter.text = String(gold)
        turnCounter.text = String(turns)
        // Do any additional setup after loading the view, typically from a nib.

    func increaseGold () {
        if seconds == 1 {
            gold = gold + 1000
            turns = turns + 1
        }}
   func updatelabels () {
        goldCounter.text = String(gold)
        turnCounter.text = String(turns) }

    }
}

最佳答案

您的主要问题是您没有调用 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()
    }
}

关于swift - 从正在运行的计时器更新标签变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52947606/

相关文章:

ios - 是否可以在 Xcode 中加载包含 swift 类的资源文件夹的内容?

swift - 如何在 Swift 中获取 UILabel 的高度?

c - 在 ANSI C 中,如何制作计时器?

c++ - Qt QLCDNumber 定时器

label - 长标签文本中的换行

css - 如何仅显示图像的一部分作为背景

ios - 用户通过 Facebook 登录后验证 API 请求

android - 用 nanoTime() 循环

label - 在 SPSS 中将所有值标签更改为数字

swift - 添加 Float 值时,表达式类型在没有更多上下文的情况下不明确