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

Unwrap optionals of the type Date() from CoreData?

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

加载 viewcontroller 时,会将此值与 currentDate 和时间进行比较,如果 currentTime > sReminderDate,则标签会显示 "Time's Up"。问题是当用户第一次加载 viewcontroller 时,时间和日期没有设置,sReminderDate 是 '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
}

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

let currentDate = Date()

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

  • 已更新答案

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 }

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

我会做类似的东西:

guard let selectedDate = editnotes?.sSelectedDate,
      let needsToRemind = editnotes?.sReminderState else { 
  // implement logic when you DO NOT have values
  return 
}
// Everything is cool and you have values => can compare 
if selectedDate < Date() && needsToRemind {
   editnotes?.sSelectedDate = "Time's up"
   // Possibly editnotes?.sReminderDate better to unwrap somehow
   // if-let, guard-let, ??
   reminderMsg.text = editnotes?.sReminderDate
}

代码更简洁,更具代表性