【问题标题】:countdown using NSDate transition to swift 3倒计时使用 NSDate 过渡到 swift 3
【发布时间】:2016-10-10 05:37:54
【问题描述】:

今天我切换到 Swift 3 语言。我正在制作一个应用程序,它会在事件发生前对天数小时分钟和秒进行倒计时。以下代码在我的应用中显示以下内容:

可选(6) 天可选(59) 分钟可选(35) 秒。

我在 Swift 2 中的倒计时工作正常,但是一旦我将其转换为 Swift 3,可选的就会出现在数字前面。有 Swift 3 经验的人知道这个问题的解决方案吗?

  @IBAction func NextWeeklyButtonPressed(_ sender: AnyObject) {
    let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(printTimeWeeks), userInfo: nil, repeats: true)
    timer.fire()        
   }

   func printTimeWeeks() {
    formatter.dateFormat = "MM/dd/yy hh:mm:ss a"
    let startTime = Date()
    let endTime = formatter.date(from: WeeklyDate.text!+" 12:00:00 a")

    // WeeklyDate.text is a date in short style

    let timeDifference = (userCalendar as NSCalendar).components(requestedComponent, from: startTime, to: endTime!, options: [])

    WeeklyDateLabel.text = "\(timeDifference.day) Days \(timeDifference.minute) Minutes \(timeDifference.second) Seconds"
}

【问题讨论】:

  • 这意味着timeDifference.day 是可选的。您是否查找过 Swift 3 的 DateComponents 参考资料?

标签: swift swift2 swift3


【解决方案1】:

追加!到字段

WeeklyDateLabel.text = "\(timeDifference.day!) Days \(timeDifference.minute!) Minutes \(timeDifference.second!) Seconds"

【讨论】:

  • 在这种情况下(通常情况下)强制解包选项可能不是一个好主意。
  • 天或月......永远不要为零。我们必须检查从 server 获取的对象的 nil 。日或月总是有一个值;)
【解决方案2】:

您需要解开可选字符串,例如

if let day = timeDifference.day, minute = timeDifference.minute, second = timeDifference.second {
  WeeklyDateLabel.text = "\(timeDifference.day) Days \(timeDifference.minute) Minutes \(timeDifference.second) Seconds"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    相关资源
    最近更新 更多