从CoreData解包Date()类型的选项?

时间:2018-01-13 18:55:02

标签: ios swift core-data optional unwrap

我创建了一个NSManagedObject sReminderDate:Date()。它存储在coreData中。此值来自用户从datePicker设置的日期和时间。

当加载viewcontroller时,将该值与currentDate和time进行比较,如果currentTime> sReminderDate然后标签上写着“Time is Up”。问题是当用户第一次加载viewcontroller时,时间和日期未设置sReminderDate为'null'。因此,它崩溃了我的应用程序,因为它是null,我正在使用它进行比较。

我很难用if-let和guard语句展开它。帮助将不胜感激!

let currentDate = NSDate() //Current date and time stored whenever viewcontroller is loaded

if ((currentDate as! Date )  >= (editnotes?.sSelectedDate)! && (editnotes?.sReminderState == true)) //Comparison -> sSelectedDate is the date stored in coreData by the user when scheduling task
{
    editnotes?.sReminderDate = "Time is up"
    reminderMsg.text = editnotes?.sReminderDate
}

2 个答案:

答案 0 :(得分:1)

看看你想要实现的是在没有这些值时分离代码,何时获得它们并且可以比较,即实现你的逻辑

我会做出类似的事情:

127.0.0.1:18890/< url >

代码更清晰,更具代表性

答案 1 :(得分:0)

您可以在swift中使用逗号(,)作为AND运算符。

let currentDate = Date()

if let editnotes = editnotes, currentDate >= editnotes.sSelectedDate!, editnotes.sReminderState == true { editnotes?.sReminderDate = "Time is up" reminderMsg.text = editnotes?.sReminderDate }

  • 更新了ans

let currentDate = Date()

if let selectedDate = editnotes?.sSelectedDate, let reminderState = editnotes?.sReminderState, currentDate >= selectedDate, reminderState == true { editnotes?.sReminderDate = "Time is up" reminderMsg.text = editnotes?.sReminderDate }