微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何将选择器绑定到计算值 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 举报,一经查实,本站将立刻删除。