Swift 将秒转换为分钟:标签MacOS中的秒

Swift 将秒转换为分钟:标签MacOS中的秒,swift,xcode,timer,countdown,seconds,Swift,Xcode,Timer,Countdown,Seconds,我是一名学校教师,我们被“命令”在上课时使用特定的计时器,low and Seek在我们的苹果iMac上不起作用。我正在尝试在xcode中创建自己的窗口,到目前为止,我已经创建了一个基本窗口,可以在几秒钟内对标签进行倒计时。目前我已经分配了按钮,它们可以工作(以60秒为增量) 这是可行的,但理想情况下,我希望标签显示分钟和秒,而不是(更容易为孩子们)。编写此代码的最佳方法是什么?我上次使用xcode是在2009年,现在我已经过时了!!提前谢谢 -- -- -- --有很多解决方案。一个方便的方

我是一名学校教师,我们被“命令”在上课时使用特定的计时器,low and Seek在我们的苹果iMac上不起作用。我正在尝试在xcode中创建自己的窗口,到目前为止,我已经创建了一个基本窗口,可以在几秒钟内对标签进行倒计时。目前我已经分配了按钮,它们可以工作(以60秒为增量)

这是可行的,但理想情况下,我希望标签显示分钟和秒,而不是(更容易为孩子们)。编写此代码的最佳方法是什么?我上次使用xcode是在2009年,现在我已经过时了!!提前谢谢

--

--

--


--有很多解决方案。一个方便的方法是
datecomponentsformter

let formatter : DateComponentsFormatter = {
    let formatter = DateComponentsFormatter()
    formatter.allowedUnits = [.minute, .second]
    return formatter
}()

@objc func updateTimer() {
    seconds -= 1    
    countdownLabel.stringValue = formatter.string(from: TimeInterval(seconds))!
}

一些改进:

以秒为单位为所有按钮分配标签,例如将
threeMin
按钮的标签设置为180。然后只使用一个
iAction
并将所有按钮连接到该操作

在操作中,首先检查计时器是否正在运行,并仅在计时器未运行时启动它

var timer : Timer?

@IBAction func startTimer(_ sender: NSButton) {
   if timer == nil {
      seconds = sender.tag
      timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.updateTimer), userInfo: nil, repeats: true)

   } 
}
创建一个函数以可靠地停止计时器

func stopTimer() {
    if timer != nil {
       timer?.invalidate()
       timer = nil
     }
}
如果
seconds
为0,则在
updateTimer()函数中停止计时器

@objc func updateTimer() {
    seconds -= 1    
    countdownLabel.stringValue = formatter.string(from: TimeInterval(seconds))!
    if seconds == 0 { stopTimer() }
}

嗨,欢迎来到这个网站。如果您添加主语言标记,更多人将看到您的问题。(这是Swift吗?如果是,请在底部的标记框中添加
Swift
标记。)欢迎使用堆栈溢出!请添加图像而不是链接。这一次我已经为你做了这件事-请查看更多关于格式化的信息。谢谢你的帮助和建议,我尝试了这张图片,但由于声誉问题,它会允许我。谢谢你整理
var timer : Timer?

@IBAction func startTimer(_ sender: NSButton) {
   if timer == nil {
      seconds = sender.tag
      timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.updateTimer), userInfo: nil, repeats: true)

   } 
}
func stopTimer() {
    if timer != nil {
       timer?.invalidate()
       timer = nil
     }
}
@objc func updateTimer() {
    seconds -= 1    
    countdownLabel.stringValue = formatter.string(from: TimeInterval(seconds))!
    if seconds == 0 { stopTimer() }
}