Как связать свойства переменной @State в ForEach? - PullRequest
0 голосов
/ 01 февраля 2020
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])
            }
        }
    }
}

Проблемная строка c:

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 Ответ

1 голос
/ 01 февраля 2020

Ошибки SwiftUI могут быть очень туманными.

Вы фактически пытаетесь связать объект FormField с Binding<String>, где ни объект не принимает BindableObject, ни ивар name (который вы предположительно предположительно) хотите привязать) к нему прикреплен издатель (@Published).

Полагаю, вы хотите привязать ивар name к TextField:

  ForEach(form.fields.indices) { idx in
    TextField("Name", text: self.$form.fields[idx].name)
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...