问题描述
当前,我有一个bool“心脏”按钮,供用户点击并将更改后的值保存到UserDefault数据库中
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
中存储/观察者设置,那么在另一个视图中,您可以仅使用UserSettings
的另一个实例
例如:
struct AnotherView: View {
@ObservedObject var userSettings = UserSettings()
var body: some View {
VStack {
if self.userSettings.isVisited {
Image(systemName: "heart.fill").font(.title)
} else {
Image(systemName: "heart").font(.title)
}
}
}
}
否则,您应该将UserSettings
的单个实例存储在顶级位置(场景,应用程序等),并将该单个实例作为环境对象注入到两个(所有)视图中
struct RootView: View {
@EnvironmentObject var userSettings: UserSettings
...
struct AnotherView: View {
@EnvironmentObject var userSettings: UserSettings
...