2016-01-02 82 views
1

我試圖在swift中實現代碼,它會給我距離當前日期最近的日期。Swift - 可選日期比較

的事情是我希望用戶在最多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第一/第二/ thirdReminder是零,如果它不是然後將它與當前日期進行比較。如果它是'更大',那麼從此日期開始將String設置爲標籤。但是我也想比較一下自己之間的第一次/第二次/第三次提醒的日期,或者以某種方式確保第一次提醒總是早於第二次,等等。

我不知道這是否很難,但我試圖弄清楚,我卡住了。

回答

2

您應該使用nil coalescing operator來達到此目的。

的零合併運算(a ?? b)解開一個可選a,如果它包含一個值,或返回默認值b如果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在上面的代碼

+0

完美主意NSTimeIntervalSince1970!謝謝! – Ancinek