我正在尝试在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总是早于第二,依此类推。
我不知道这是不是很难,但我想弄明白而且我被卡住了。
答案 0 :(得分:2)
您应该使用nil coalescing operator
来实现此目的。
nil合并运算符
(a ?? b)
在包含值时展开可选a
,如果b
为nil,则返回默认值a
。表达式a
始终是可选类型。表达式b
必须与a
中存储的类型匹配。
您可以获取提醒日期,存储在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.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,您只需将上述代码中的nil
替换为默认值