gpt4 book ai didi

swift - 多次按下开始倒计时的按钮会加快倒计时

转载 作者:行者123 更新时间:2023-11-28 07:51:41 27 4
gpt4 key购买 nike

我刚开始学习 swift 。我发现当我使用按钮开始倒计时时,如果我按下按钮两次,它会加快这个过程。要添加什么来防止这种情况发生?

@IBAction func startButton(_ sender: Any) {

timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(processTime), userInfo: nil, repeats: true)
}
@objc func processTime(){
if counter > 0 {
counter -= 1
timeLabel.text = "\(counter)"
}else {
timer.invalidate()
}

}

我尝试使用 sender.isEnabled = false 它给出了这个错误(“Any”类型的值没有成员“isEnabled”)所以我这样做了:

@IBAction func startButton(_ sender: Any) {

if timer.isValid != true{
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(processTime), userInfo: nil, repeats: true)
}
}

最佳答案

很多方式,取决于你喜欢什么逻辑。
基本上,您需要确保 timer 在完成之前只启动一次。

在下面的例子中,只有当timer之前没有被初始化时,我们才会启动它。
此外,当我们停止 timer 时,我们将其显式设置为 nil,因此以下逻辑会在计时器完成后再次运行。

//globally declared as optional
var timer: Timer?

@IBAction func startButton(_ sender: Any) {
//check if timer is nil
if timer != nil {
//start timer only if timer is nil
timer = Timer.scheduledTimer(timeInterval: 1,
target: self,
selector: #selector(processTime),
userInfo: nil,
repeats: true)
}
}

@objc func processTime() {
if counter > 0 {
counter -= 1
timeLabel.text = "\(counter)"
}
else {
timer.invalidate()
//clear the timer
timer = nil
}
}

关于swift - 多次按下开始倒计时的按钮会加快倒计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49502633/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com