我是Swift的新手,已经练习了大约一个星期。我已经声明了一个计时器,我使用viewDidLoad()调用了计时器的功能,并且计时器#selector指向了goldPerSec,该功能是一个简单的while循环,但是并没有每秒执行一次。

这是我的代码:

var timer = Timer()

override func viewDidLoad() {
    super.viewDidLoad()
    counter()
}

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

@objc func goldPerSec() {
    while (totalOwned >= 1) {
        Gold += (minerOwned * 1)
        goldLabel.text = "\(Gold)"
    }
}

最佳答案

while中的goldPerSec循环永远运行,从而阻止任何其他代码在主队列(包括计时器)上运行。

while循环更改为if语句。

@objc func goldPerSec() {
    if totalOwned >= 1 {
        Gold += minerOwned * 1
        goldLabel.text = "\(Gold)"
    }
}

现在,这将允许从计时器每秒调用goldPerSec,并且还允许其余用户界面正常工作。

另外,变量名称应以小写字母开头,因此Gold应该命名为gold

10-02 06:51