问题描述
我现在有
@Published var isVisited: Bool {
didSet{
UserDefaults.standard.set(isVisited,forKey: "isVisited")
}
}
init() {
self.isVisited = UserDefaults.standard.object(forKey: "isVisited") as? Bool ?? false
}
@State private var edit = false
@Observedobject var userSettings = UserSettings()
Button(action: { self.edit.toggle()}) {
if self.edit {
Image(systemName: "heart.fill").font(.title)
} else {
Image(systemName: "heart").font(.title)
}
}.foregroundColor(.red)
理想情况下,每当点击“心脏”图标时,它将被填充并将数据保存到UserDefault数据库。我只知道Toggle(isOn:..)的用途。
任何建议将不胜感激!
解决方法
你的意思是这样吗?
class UserSettings: ObservableObject {
init() {
isVisited = UserDefaults.standard.bool(forKey: "isVisited")
}
@Published var isVisited: Bool {
didSet {
UserDefaults.standard.set(isVisited,forKey: "isVisited")
}
}
}
struct RootView: View {
@ObservedObject var userSettings = UserSettings()
var body: some View {
Button(action: { self.userSettings.isVisited.toggle() }) {
if self.userSettings.isVisited {
Image(systemName: "heart.fill").font(.title)
} else {
Image(systemName: "heart").font(.title)
}
}.foregroundColor(.red)
}
}
我在这里所做的是,每次加载UserSettings
时,我都会从UserDefaults加载isVisited
,然后只要设置了该属性,它就会更新UserDefaults
。
然后在视图上,而不是使用@State
来保存数据,我直接从UserSettings
获取数据,因为它将拥有最新的数据。