如何将选择器绑定到计算值 SwiftUI

问题描述

我有一个使用 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 (将#修改为@)