我正在尝试创建一个在计时器达到零时执行简单数学运算的计数器。我的计时器工作正常,标签显示了原始变量,但是由于计时器达到“零”,它们没有更新。我的代码哪里出问题了?
{{1}}
答案 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()
}
}