swift - 如何在 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()
}
}
}
解决方案
推荐阅读
- javascript - 如何使用 ajax 获取和分离 2 个 php 变量?
- java - 摇篮错误?在 Android Studio 中
- ruby - Fastlane + Google Drive API - 找不到 Google 表格的文件
- java - 如何使用用户输入的单词选择性地打印某些文本行
- javascript - 永远不会显示“未命名”插槽上的后备内容
- excel - 使用过滤后的数据填充下拉列表
- amazon-web-services - AWS Amplify 存储模块 - Angular 6
- java - JAVA中字符串匹配的动态规划
- angular - 进行 HTTP 调用以从嵌套组件中获取值时不填充下拉列表
- python - 如何在没有附件Python的情况下执行requests.get