SwiftUI:如何将 .toggle() 而不是 Toggle(isOn..) 与 UserDefault 结合起来
SwiftUI: How to combine .toggle() not Toggle(isOn..) with UserDefault
目前我有
@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
获取数据,因为它将有最新的数据。
目前我有
@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
获取数据,因为它将有最新的数据。