【问题标题】:Tell difference in days and display to label swift区分天数并快速显示标签
【发布时间】: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。

标签: swift xcode


【解决方案1】:

错过.day,你可以试试

self.label.text = "\(diffinDays.day)"

【讨论】:

  • 即使这是正确的 OP 表示它没有显示任何内容。他的字符串插值应该显示一些关于 dateComponents 的信息。即“isLeapMonth: false”
  • 还有一个错误。 dateFormat "MM/dd/yyyy" OP 正在使用 mm(分钟),而他应该在一个月内使用 MM
  • 我明白了,OP应该在解决这些问题后给予反馈
  • 谢谢,我不经常使用这个网站,所以就我所知,OP 是什么意思?
  • 还有,如何弹出打印窗口。
猜你喜欢
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
相关资源
最近更新 更多