从 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
}
代码更简洁,更具代表性
我创建了一个 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
}
代码更简洁,更具代表性