如何解决SwiftUI:如何将.toggle而不是ToggleisOn ..与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
获取数据,因为它将拥有最新的数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。