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



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

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()
}
}

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

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

最新更新