如何在ForEach中绑定@State变量的属性?

时间:2020-02-01 00:12:23

标签: ios swift swiftui

class Form {
    var id = UUID()
    var name: String = ""
    var fields: [FormField] = []
}
class FormField {
    var id = UUID()
    var name: String = ""
}
struct LogCustomizationView: View {

    @State var form: Form

    var body: some View {
        VStack {
            ForEach(form.fields.indices) { idx in
                TextField("Name", text: self.$form.fields[dynamicMember: idx])
            }
        }
    }
}

有问题的行是:

TextField("Name", text: self.$form.fields[dynamicMember: idx])

我遇到的第一个错误是

Missing argument label 'dynamicMember:' in subscript

所以我添加了dynamicMember:,上面是这样显示的。现在我得到的错误是: Cannot convert value of type 'Int' to expected argument type 'WritableKeyPath<_, _>'

1 个答案:

答案 0 :(得分:1)

SwiftUI错误可能真的很模糊。

您正在有效地尝试将FormField对象绑定到Binding<String>,而该对象既不采用BindableObject也没有采用name ivar(您想绑定)附属的发布者(@Published)。

我猜您想将name ivar绑定到TextField:

  ForEach(form.fields.indices) { idx in
    TextField("Name", text: self.$form.fields[idx].name)
  }