【发布时间】:2018-08-07 22:59:57
【问题描述】:
我想知道如何计算两天之间的差异,然后在 Swift 4 中将它们显示到一个标签上。我不知道为什么它什么都不显示。这是我到目前为止的代码:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
var date = UserDefaults.standard.string(forKey: “date”) ?? “”
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = “mm/dd/yyyy”
var todaysDate = Date()
var futureDate = dateFormatter.date(from: date)
var diffinDays = Calendar.current.dateComponents([.day], from: todaysDate, to: futureDate!)
self.label.text = “\(diffinDays)”
请分享您认为可能存在问题的任何想法。谢谢!
更新
修改后代码仍然无法工作,最重要的是我无法打印 var diffinDays。我能想到的唯一一件事是,我在技术上不是在运行 Swift 4,而是在运行 Swift 5 beta,但是大部分代码都会运行,并且脚本中没有错误。这是修改后的代码:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
var date = UserDefaults.standard.string(forKey: “date”) ?? “”
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = “MM/dd/yyyy”
var todaysDate = Date()
var futureDate = dateFormatter.date(from: date)
var diffinDays = Calendar.current.dateComponents([.day], from: todaysDate, to: futureDate!)
self.label.text = “\(String(describing: diffinDays.day))”
}
【问题讨论】:
-
查看
Calendar#dateComponents(_from:)的返回结果——它返回了DateComponents的一个实例 -
永远不要在面向用户的文本中使用
String(describing:)。 — 如果您只是在开发一些代码,为什么要“打印”到标签上?只需说print并阅读控制台即可。 -
如果您打算在 UserDefaults 中存储日期,为什么不存储日期?存储描述日期的 string 是没有意义的。
-
日期正在另一个视图控制器中设置。而且我不只是想打印出我想显示到 UILabel。