Swift - 可选日期比较

时间:2016-01-02 18:14:15

标签: ios swift date core-data

我正在尝试在swift中实现代码,这将为我提供与当前日期最接近的日期。

问题是我希望用户在最多3个日期中选择,并且每次他选择将日期添加到名为“提醒”的数组中

然后我检查这个数组中有多少项(最多3个)(命名为:reminders),并使用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中的第一个/第二个/第三个提醒是否为nil,如果不是,则将其与当前日期进行比较。如果它“更大”,则将此日期的字符串设置为标签。但我还要比较第一/第二/第三提醒之间的日期,或者以某种方式确保firstReminder总是早于第二,依此类推。

我不知道这是不是很难,但我想弄明白而且我被卡住了。

1 个答案:

答案 0 :(得分:2)

您应该使用nil coalescing operator来实现此目的。

  

nil合并运算符(a ?? b)在包含值时展开可选a,如果b为nil,则返回默认值a。表达式a始终是可选类型。表达式b必须与a中存储的类型匹配。

     

Source - developer.apple.com

您可以获取提醒日期,存储在myOptionalDate中,并检查它是否为零。如果是,那么我们将做

0 > NSDate().timeIntervalSince1970

总是假的。如果它不是零,我们可以做相当于

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.firstRemindernewobject.secondRemindernewobject.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,您只需将上述代码中的nil替换为默认值