问题描述
我有一个使用 swiftui 编写的视图 SettingsView,以及一个使用 UserDefaults 作为底层数据存储的数据存储 Settingsstore。
final class Settingsstore: ObservableObject {
var veLocityLocation: RenderLocation {
set { defaults.set(newValue.rawValue,forKey: Keys.veLocityLoaction) }
get { RenderLocation(rawValue: defaults.integer(forKey: Keys.veLocityLoaction)) ?? .top }
}
}
struct SettingsView: View {
@State var settings: Settingsstore = Settingsstore();
var body: some View {
Form {
Section(header: Text("Render settings")) {
Toggle("Render veLocity to video",isOn: $settings.renderVeLocityToVideo)
Picker(selection: $settings.veLocityLocation,label: Text("Render location")) {
ForEach(RenderLocation.allCases) { b in
Text(b.name).tag(b)
}
}
}
}
.navigationTitle("Settings")
}
}
当我在选择器中选择一个新值时,它会正确保存到用户默认值,但不会呈现到视图中。这是因为从不调用计算属性的 get。如果我离开该视图并返回,选择器现在具有正确的值。
我知道我在选择器中使用 Enum 就像我将 Settingsstore 中的计算属性更改为视图中的简单 @State 属性一样,一切都按预期工作(当然保存到 UserDefaults 除外)
有没有办法在设置后获取计算属性进行渲染,或者有没有更好的方法来构造此代码,以便我可以轻松地保留选择器值。
(是的,我已经用其他数据类型尝试过这个,例如整数,字符串同样的问题)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)