无法将“String”类型的值转换为预期的参数类型“Binding<String>”

blk*_*sld 4 binding swift option-type swiftui

我是 SwiftUi 新手,遇到一个无法修复的错误。基本上,我想更改 SettingsView 中 AB 类的名称属性。

另外,我还有一些疑问,希望大家能够解答。

  1. 当 AB 类已经作为 @Published 属性存在于我的 User 类中时,我是否必须将其设为具有 @Published 属性的 ObservableObject?
  2. AB 类应该是一个结构体吗?我使用 User 类作为环境对象
class User: ObservableObject {
   @Published var name: String
   ...
   @Publsihed var ab: [AB]
   @Published var currentAb: AB?

   internal init(name: String, ab: [AB]) {
      self.name = name
      self.ab = ab
      self.currentAb = ab.first
   }
}
Run Code Online (Sandbox Code Playgroud)
class AB: ObervableObject {
    @Published var name: String
    ...
}
Run Code Online (Sandbox Code Playgroud)

由于 TextField("new name", text: $user.currentAb.wrappedValue.name),我在这里收到错误。

struct SettingsView: View {

@EnvironmentObject var user: User

var body: some View {
        Form { //Error: Unable to infer complex closure return type; add explicit type to disambiguate
           Section(header: Text("")) {
                TextField("new name", text: $user.currentAb.wrappedValue.name) // <- Error is shown here
                    .textFieldStyle(RoundedBorderTextFieldStyle())
            }
        }
}

Run Code Online (Sandbox Code Playgroud)

谢谢。

Asp*_*eri 9

最好通过分成不同的视图来完成,例如

var body: some View {
        Form {
           Section(header: Text("")) {
               if user.currentAb != nil {
                  SomeNameView(vm: user.currentAb!)
               } else {
                  Text("any holder view here")
               }
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

和分离视图

struct SomeNameView: View {
    @ObservedObject var vm: AB

    var body: some View {
       TextField("new name", text: $vm.name)
           .textFieldStyle(RoundedBorderTextFieldStyle())
    }
}
Run Code Online (Sandbox Code Playgroud)