Swift - 可选日期比较
Posted
技术标签:
【中文标题】Swift - 可选日期比较【英文标题】:Swift - optional dates comparison 【发布时间】:2016-01-02 18:14:14 【问题描述】:我正在尝试快速实现代码,这将为我提供与当前日期最接近的日期。
问题是我希望用户最多选择 3 个日期,每次他选择的日期都会添加到名为“提醒”的数组中
然后我检查这个数组中有多少项(最多 3 个)(命名为:提醒),并使用 CoreData 存储数组中的特定日期/日期:
if addObjectView.reminders.count == 1
newobject.firstReminder = addObjectView.reminders[0]
if addObjecteView.reminders.count == 2
newobject.firstReminder = addObjectView.reminders[0]
newobject.secondReminder = addObjectView.reminders[1]
if addObjectView.reminders.count == 3
newobject.firstReminder = addObjectView.reminders[0]
newobject.secondReminder = addObjectView.reminders[1]
newobject.thirdReminder = addObjectView.reminders[2]
然后我想实现代码来首先检查来自 CoreData 的第一个/第二个/第三个提醒是否为零,如果不是,则将其与当前日期进行比较。如果它“更大”,则将此日期的字符串设置为标签。但我也想比较他们之间的第一个/第二个/第三个提醒的日期,或者以某种方式确保第一个提醒总是早于第二个等等。
我不知道这是否有那么难,但我正在努力解决问题,但我被卡住了。
【问题讨论】:
【参考方案1】:您应该为此使用nil coalescing operator
。
如果
(a ?? b)
包含一个值,则 nil 合并运算符(a ?? b)
解包可选的a
,如果a
为 nil,则返回默认值b
。表达式a
始终是可选类型。表达式b
必须与存储在a
中的类型匹配。Source - developer.apple.com
你可以得到提醒的日期,存储在myOptionalDate
,然后检查它是否为nil。如果是,那我们就做
0 > NSDate().timeIntervalSince1970
这将永远是错误的。如果它不是 nil,我们可以做相当于
myOptionalDate!.timeIntervalSince1970 > NSDate().timeIntervalSince1970
它会告诉你是否应该添加标签
if((myOptionalDate?.timeIntervalSince1970 ?? 0) > NSDate().timeIntervalSince1970)
//add the label
什么是简写
var myInterval = 0
if(myOptionalDate != nil)
myInterval = myOptionalDate!.timeIntervalSince1970
if(myInterval > NSDate().timeIntervalSince1970)
此外,虽然这与问题无关,但取决于您的代码的格式,您不应该使用 if 语句来检查有多少提醒
默认情况下,newobject.firstReminder
、newobject.secondReminder
和 newobject.thirdReminder
将(我假设)为零。因此,您可以将所有示例代码更改为
let originalReminders = addObjectView.reminders
newobject.firstReminder = originalReminders.count > 0 ? originalReminders[0] : nil
newobject.secondReminder = originalReminders.count > 1 ? originalReminders[1] : nil
newobject.thirdReminder = originalReminders.count > 2 ? originalReminders[2] : nil
如果默认值不为零,您可以简单地将上面代码中的nil
替换为您的默认值
【讨论】:
完美的想法,使用 NSTimeIntervalSince1970!谢谢!以上是关于Swift - 可选日期比较的主要内容,如果未能解决你的问题,请参考以下文章
Swift日期比较函数 记录下 Comparing date in Swift