我已经创建了NSManagedObject sReminderDate:Date()。它存储在coreData中。其值来自用户在日期选择器中设置的日期和时间。
加载viewcontroller时,将此值与currentDate和time进行比较,如果currentdime>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
}

最佳答案

看看你想要实现的是当你没有这个值的时候,当你得到它们并且可以比较的时候,分离代码,也就是说,实现你的逻辑
我会做这样的东西:

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
}

代码更简洁,更具代表性

10-08 13:28