我目前有一个带有以下代码的计时器应用。我想知道一旦计时器到达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)
}
答案 0 :(得分:0)
据我们所知,在您的代码中,可以从外部调用endTimer
来停止计时器。所以那不是最佳位置。
endTimer
重命名为timeIsUp
或类似名称,并将此回调设为私有(以确保您不会从其他任何地方调用它。public func stopTimer()
来使计时器无效。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)
}