将日期选择器保存到 userdefaults 并在加载时设置值

Save datepicker to userdefaults and set value on load

更改为 UserDefaults 时尝试保存 datePicker 日期,如果此 UserDefaults 存在则设置 datePicker 日期。

我进行了研究,但我发现的一切似乎都过时了,无法正常工作。

我在设置保存的 UserDefaults 中的日期时似乎遇到了问题。很确定我做错了。我只是在学习 Xcode/Swift 如果这很明显,我深表歉意。

保存日期:

@IBOutlet weak var NotificationTime: UIDatePicker!
let notificationTimeKey = "notificationTime"

override func viewDidLoad(){
    super.viewDidLoad()

    //Not sure how to set the date
    if let dateValue = defaults.value(forKey: notificationTimeKey){
        NotificationTime.date = dateValue as! NSDate <--- Cannot assign value of type 'NSDate?' to type 'Date'
    }
}  

@IBAction func updateNotificationTime(_ sender: Any){
    let selectedDate = NotificationTime.date
    UserDefaults().set(selectedDate, forKey: notificationTimeKey)
}

从 UserDefaults 读取日期和设置日期选择器 date 的代码应该是:

if let dateValue = defaults.object(forKey: notificationTimeKey) as? Date {
    NotificationTime.date = dateValue
}

切勿使用 value(forKey:),除非您有明确且可理解的理由使用键值编码。

并且不要在 Swift 中使用 NSDate

此外,变量和方法名称应以小写字母开头。您应该将您的插座命名为 notificationTime。 Class 和结构名称以大写字母开头。

我从 'chriswaco' https://www.reddit.com/r/Xcode/comments/faxfa8/how_do_you_save_a_date_form_a_date_picker/

的 Redit 中找到了另一个类似于上述代码的答案

适用于 iOS 14 和 Xcode 12。

保存:(将其放入 DatePicker 操作函数中)

 let theDate = datePicker.date
 UserDefaults.standard.set( theDate, forKey:"myDateKey")

回读,即 (ViewDidLoad)

 if let savedDate = UserDefaults.standard.object(forKey:"myDateKey") as? Date{
    // do something with savedDate here
 }

归功于 Redit 中的 chriswaco。