SwiftUI:如何将.toggle()而不是toggle(isOn..)与UserDefault组合
目前我有SwiftUI:如何将.toggle()而不是toggle(isOn..)与UserDefault组合,swiftui,toggle,userdefaults,Swiftui,Toggle,Userdefaults,目前我有 @Published var isVisited: Bool { didSet{ UserDefaults.standard.set(isVisited,forKey: "isVisited") } } init() { self.isVisited = UserDefaults.standard.object(forKey: "isVisited") as?
@Published var isVisited: Bool {
didSet{
UserDefaults.standard.set(isVisited,forKey: "isVisited")
}
}
init() {
self.isVisited = UserDefaults.standard.object(forKey: "isVisited") as? Bool ?? false
}
理想情况下,只要点击“心脏”图标,它就会被填充并将数据保存到UserDefault数据库。我只知道Toggle(伊森:…)的用法
任何建议都将不胜感激 你的意思是这样的吗
class用户设置:observeObject{
init(){
isVisited=UserDefaults.standard.bool(forKey:“isVisited”)
}
@已发布变量:Bool{
迪塞特{
UserDefaults.standard.set(isvisted,forKey:“isvisted”)
}
}
}
结构RootView:View{
@ObservedObject var userSettings=userSettings()
var body:一些观点{
按钮(操作:{self.userSettings.isvisted.toggle()}){
如果访问了self.userSettings.isk{
图像(系统名:“heart.fill”).font(.title)
}否则{
图像(系统名称:“心脏”).font(.title)
}
}.foregroundColor(.red)
}
}
我在这里所做的是,每次UserSettings
加载时,我都会从UserDefaults加载isvisitored
,然后每当设置该属性时,它都会更新UserDefaults
然后在视图上,而不是使用
@State
保存数据,我直接从UserSettings
获取数据,因为它将拥有最新的数据。wow!!我做了同样的事情,但没有成功,可能我留下了$like self.$userSettings.isvisitored.toggle()!!非常感谢@Daniel Amarante您可以删除init
并执行:@Published var isvisted=UserDefaults.standard.bool(forKey:isvisted”){…
顺便问一下@Daniel Amarante和@pawello2222,如果我想将保存的数据显示到另一个视图,那么该怎么做?我真的不想用CoreData来做这件事guy@DucDang这是另一个问题:)请创建一个新帖子并在那里描述您的问题。@DucDang您可以将UserSettings
的同一个实例作为环境对象共享,然后对它的所有更改都将在所有屏幕中发生。
@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)