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)