如何在 swift 中创建带有分钟和秒的倒数计时器?

How Do I create a countdown timer with minutes and seconds in swift?

我找不到一个用分钟和秒进行倒数计时器的教程。有那么一两个,但是有点差。

import UIKit

class HomeViewController: UIViewController {
    @IBOutlet weak var focusSession: UILabel!
    @IBOutlet weak var breakSession: UILabel!

    var prodSeconds = String() // This value is set in a different view controller
    lazy var intProdSeconds = Int(prodSeconds)
    var timer = Timer()
    var isTimerRunning = false  // Make sure only one timer is running at a time

    override func viewDidLoad() {
        super.viewDidLoad()

        if isTimerRunning == false {
            runProdTimer()
        }

        //focusSession.text = String(prodMinutes) + ":" + String(prodSeconds) // Ignore this for now stack overflow ppl
    }

    func runProdTimer() {
        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(HomeViewController.updateProdTimer)), userInfo: nil, repeats: true)
        isTimerRunning = true
    }

    @objc func updateProdTimer() {
        if intProdSeconds! < 1 {
            timer.invalidate()
            focusSession.text = "00:00"
        }
        else {
            intProdSeconds! -= 1
            focusSession.text = prodTimeString(time: TimeInterval(prodSeconds)!)
        }
    }

    func prodTimeString(time: TimeInterval) -> String {
        let prodMinutes = Int(time) / 60 % 60
        let prodSeconds = Int(time) % 60

        return String(format: "%02d:%02d", prodMinutes, prodSeconds)
    }
}

用户输入他们的时间量并将其存储在 prodSeconds 变量中,然后使用 lazy 变量将其转换为下面的 Int

但是,当我 运行 应用程序时,计时器 仍然没有倒计时 。 这应该只是一个秒计时器,我是从另一个教程中学习的。但是所有发生的事情是,显示计时器的标签只是以 00:prodSeconds 的格式显示用户输入的数字,并没有真正倒计时。

P.S。现在不要担心实现 start/stop 按钮。在我的例子中,计时器应该在视图加载时启动。

问题是你从

开始倒数
intProdSeconds! -= 1

并将prodSeconds传给这个

focusSession.text = prodTimeString(time: TimeInterval(prodSeconds)!)

所以确保只处理 intProdSeconds