如何使用 UserDefaults 从 UIDatePicker 存储?

How can I use UserDefaults to store from UIDatePicker?

我是编程新手 Swift。我正在构建的应用程序非常简单,我想添加一个简单的本地通知,由用户设置的 UIDatePicker 触发。我已经设法设置了通知,但我跪在地上试图了解如何在每次重新启动应用程序时防止 UIDatePicker 重置。这是相关代码(没有 AppDelegate.swift 中的内容):

 @IBAction func datePicker(_ sender: UIDatePicker) {

    let selectedDate = sender.date
    let delegate = UIApplication.shared.delegate as? AppDelegate
    delegate?.scheduleNotification(at: selectedDate)

}

由于Date不符合NSCoding,不能直接存入用户默认值。您需要将其转换为 "property list type"(这意味着您可以在 属性 列表、IntDoubleStringDictionary 等)。在这种情况下,您会将 Date 转换为 Double:

let selectedDate = sender.date
let timeSince1970 = selectedDate.timeIntervalSince1970
// now we have the double value, we can store it in user defaults! :)
UserDefaults.standard.set(timeSince1970, forKey: "myDate")

编辑:

糟糕!看来我弄错了,你可以实际上直接在用户默认值中存储一个Date

UserDefaults.standard.set(selectedDate, forKey: "myDate")

要取回存储的日期并将其设置为日期选择器的选定日期,只需在 viewDidLoad:

中执行此操作
let selectedDate = UserDefaults.standard.object(forKey: "myDate") as? Date
myDatePickerOutlet.setDate(selectedDate ?? Date(), animated: false)

如果您将 Double 存储为日期,您可以像这样检索它:

let selectedDate = Date(
    timeIntervalSince1970: UserDefaults.standard.double(forKey: "myDate"))