Swiftui 无法将选择器结果保存到UserDefault

Swiftui 无法将选择器结果保存到UserDefault,swiftui,Swiftui,我正在尝试将选择器的结果保存为用户默认值。用户默认的保存操作通过方法saveBase在类UserData中发生 我用按钮成功地尝试了类似的技术,但我在选择器发出著名错误后的呼叫: 类型“()”无法与视图一致 在正文中只能使用视图-不能执行以下操作: self.userData.saveBase(baseEntry: self.baseEntry) 您可以使用onChange保存值: Picker(selection: $baseEntry, label: Text("Select B

我正在尝试将选择器的结果保存为用户默认值。用户默认的保存操作通过方法saveBase在类UserData中发生

我用按钮成功地尝试了类似的技术,但我在选择器发出著名错误后的呼叫:

类型“()”无法与视图一致


正文中
只能使用视图-不能执行以下操作:

self.userData.saveBase(baseEntry: self.baseEntry)
您可以使用
onChange
保存值:

Picker(selection: $baseEntry, label: Text("Select Base >")) {
    ForEach(0 ..< self.base.count) {
        Text(self.base[$0]).tag($0)
    }
    .onChange(of: baseEntry) {
        self.userData.saveBase(baseEntry: $0)
    }
}
并以与
@State
变量相同的方式在选择器中使用:

Picker(selection: $baseEntry, label: Text("Select Base >")) {

@AppStorage工作得很好,但不更新存储在类UserData(UserData.baseCurr)中的参数。.onChange具有最大的潜力,但由于我们使用的是本地私有状态参数(baseEntry),因此它不会被userData更新。baseCurr@GalenSmith视图中可能不需要单独的
@State
变量。只需执行
Picker(selection:$userData.baseCurr
并观察为
.onChange(of:userData.baseCurr){
Picker(selection:$userData.baseCurr,label:Text(“Currency>”){ForEach(0..生成消息:无法将类型为“Int”的值转换为预期的参数类型“()'.@GalenSmith Use
.onChange(of:userData.baseCurr){userData.saveBase(baseEntry:$0)}
感谢pawello2222的帮助。我终于让它工作起来了。我在picker和onChange中都使用了userData.baseCurr。如果在没有参数的情况下调用user data.saveBase方法,SwiftUI会给出上面列出的两个错误;如果我在调用中保留@State private var baseEntry:$0作为占位符,一切正常。
Picker(selection: $baseEntry, label: Text("Select Base >")) {
    ForEach(0 ..< self.base.count) {
        Text(self.base[$0]).tag($0)
    }
    .onChange(of: baseEntry) {
        self.userData.saveBase(baseEntry: $0)
    }
}
@AppStorage("base") var baseEntry = 0
Picker(selection: $baseEntry, label: Text("Select Base >")) {