Swift 计时器失效后运行的条件

Swift 计时器失效后运行的条件,swift,Swift,我目前有一个计时器应用程序,代码如下。我想知道,当计时器达到00:00时,如何对条件(例如显示消息的标签)进行编程。这仅仅是一个简单的if语句吗?如果是,那会是什么样子 任何帮助都将不胜感激。谢谢大家! @IBOutlet weak var timerLabel: UILabel! var countdownTimer: Timer! var totalTime = 60 func startTimer() { countdownTimer = Timer.scheduledTimer(time

我目前有一个计时器应用程序,代码如下。我想知道,当计时器达到00:00时,如何对条件(例如显示消息的标签)进行编程。这仅仅是一个简单的if语句吗?如果是,那会是什么样子

任何帮助都将不胜感激。谢谢大家!

@IBOutlet weak var timerLabel: UILabel!
var countdownTimer: Timer!
var totalTime = 60
func startTimer() {
countdownTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: 
#selector(updateTime), userInfo: nil, repeats: true)
}
@objc func updateTime() {
timerLabel.text = "\(timeFormatted(totalTime))"

if totalTime != 0 {
        totalTime -= 1
    } else {
        endTimer()
    }
}
func endTimer() {
    countdownTimer.invalidate()
}
func timeFormatted(_ totalSeconds: Int) -> String {
    let seconds: Int = totalSeconds % 60
    let minutes: Int = (totalSeconds / 60) % 60
    return String(format: "%02d:%02d", minutes, seconds)
}

据我们所知,在您的代码中,
endTimer
可以从外部调用以停止计时器。所以那不是最好的位置

  • 我会将
    endTimer
    重命名为
    timeIsUp
    或类似名称,并将此回调设置为私有(以保证您不会从其他任何地方调用它)
  • 使用
    public func stopTimer()
    使计时器无效
  • timeIsUp
因此,
timeIsUp
将是放置消息的地方

除了这个重构建议,在您当前的代码中,我会将消息内容放在
else{endTimer()}
代码块中,因为这就是满足“时间到了”条件的地方

@IBOutlet weak var timerLabel: UILabel!
var countdownTimer: Timer!
var totalTime = 60
func startTimer() {
    countdownTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true)
}

@objc func updateTime() {
    timerLabel.text = "\(timeFormatted(totalTime))"

    if totalTime != 0 {
        totalTime -= 1
    } else {
        // ⬅️ put the message code here
        endTimer()
    }
}
func endTimer() {
    countdownTimer.invalidate()
}
func timeFormatted(_ totalSeconds: Int) -> String {
    let seconds: Int = totalSeconds % 60
    let minutes: Int = (totalSeconds / 60) % 60
    return String(format: "%02d:%02d", minutes, seconds)
}

看起来您应该将语句放在
endTimer
方法中。如果totalTime!=0,则该条件已经作为
的else部分存在。