【问题标题】:Swift countdown timer in seconds that updates label each minute以秒为单位的 Swift 倒数计时器,每分钟更新一次标签
【发布时间】:2020-05-05 05:36:19
【问题描述】:

我有一个工作 10 分钟的倒数计时器,它每分钟更新一次标签,直到它不到一分钟,并且每秒更新一次标签。我敢肯定有一种更优雅的方法可以将 10 分钟缩短到 2 分钟,但我想不出如何进行数学计算并插入时间。有什么想法吗?

let countdown = 600

func countdownAction() {
  countdown -= 1

  if countdown > 540 {
    label.text = "10 minutes"
  } else if countdown > 480 {
    label.text = "9 minutes"
  } else if countdown > 420 {
    label.text = "8 minutes"
  } else if countdown > 360 {
    label.text = "7 minutes"
  } else if countdown > 300 {
    label.text = "6 minutes"
  } else if countdown > 240 {
    label.text = "5 minutes"
  } else if countdown > 180 {
    label.text = "4 minutes"
  } else if countdown > 120 {
    label.text = "3 minutes"
  } else if countdown > 60 {
    label.text = "2 minutes"
  } else if countdown > 0 {
    label.text = "1 minute"
  } else {
    label.text = "\(countdown) seconds"
  }
}

【问题讨论】:

  • 想想如何创造性地使用% 60/ 60
  • 谷歌关于 DateComponentsFormatter positionalTime
  • 与您的问题无关,但您永远不应该依赖计时器来测量经过的时间。获取开始日期并使用Date 属性timeIntervalSinceNow 来衡量它。

标签: swift


【解决方案1】:
  • 首先检查 countdown 是否小于 60,然后打印秒数。
  • 否则使用取模 (%) 运算符来检查 0 秒的值。然后打印会议记录 (countdown / 60)

    var countdown = 600 // must be var !
    
    func countdownAction() {
        countdown -= 1
        if countdown < 60 {
            label.text = "\(countdown) seconds"
        } else if countdown % 60 == 0 {
            label.text = "\(countdown / 60) minutes"
        }
    }
    

【讨论】:

    【解决方案2】:

    使用整数除法,您可以通过使用将countdown 除以 60 的结果来简化代码,然后对一分钟和几秒进行特殊检查

    func countDownAction() {
        countdown -= 1
        let value = countdown / 60
    
        if value > 1 {
            label.text = "\(value) minutes"
        } else if countdown >= 60 {
            label.text = "1 minute"
        } else {
            label.text = "\(countdown) seconds"
        }
    }
    

    【讨论】:

    • 谢谢@JoakimDanielson!这非常有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多