首页 > 解决方案 > 如何在 SwiftUI 中使用 UserDefaults 从 DatePicker 中保存/检索?

问题描述

我正在尝试使用 DatePicker 选择一天中的特定时间,然后在选择该时间后,将时间保存为 ObservedObject 并使用 SwiftUI 将其保存到我的 UserDefaults 中。下面我的代码的问题是,虽然数据在时间的初始设置后被保存,但如果时间改变,该更新不会像我期望的那样显示在我的 DatePicker 对象中。任何人都可以帮助看看我在这里的代码做错了什么:

用户数据.swift

import SwiftUI

class UserData: ObservableObject {

@Published var wakeUpTime: Date = UserDefaults.standard.object(forKey: "wakeUpTime") as? Date ?? Date() {
        didSet {
            UserDefaults.standard.set(self.wakeUpTime, forKey: "wakeUpTime")
        }
    }
}

AlarmSettingsView.swift

import SwiftUI

struct AlarmSettingsView: View {
    static var dateFormatter: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "hh:mm a"
        return formatter
    }()

    @ObservedObject var userData = UserData()

    var body: some View {
        VStack {
            Text("\(self.userData.wakeUpTime, formatter: AlarmSettingsView.self.dateFormatter)")
            DatePicker("Please enter time.", selection: $userData.wakeUpTime, displayedComponents: .hourAndMinute)
                .labelsHidden()
        }
    }
}

标签: swiftdatepickerswiftuiuserdefaultsobservableobject

解决方案


推荐阅读