Incapaz de usar combinar com TextField

Oct 23 2020

Estou tentando passar dados para TextField usando combine. criando um modelo de dados e usando observableObject, mas quando eu uso em textField ele me mostra o erro. Não é possível converter o valor do tipo 'String' no tipo de argumento esperado 'Binding <String>' . Não consigo entender.

modelo de dados

struct People: Identifiable {
    var id = UUID()
    var name: String
    var amount: String
}

let peopleData = [
    People(name: "A",amount: ""),
    People(name: "B",amount: ""),
    People(name: "C",amount: "")
]

ObservableObject

import Combine
class PeopleAllData: ObservableObject{
    @Published var peopleStore: [People] = peopleData
}

Campo de texto

@ObservedObject var store = PeopleAllData()

                    List{

                        ForEach(store.peopleStore){ item in
                        HStack {
                            TextField("person Name", text: item.name) //Error:- Cannot convert value of type 'String' to expected argument type 'Binding<String>'

                            Button(action: {}) {
                                Image(systemName: "minus.circle")
                                    .foregroundColor(.red)
                            }
                        }
                            
                        }
                        
                        
                        
                    }
                    .frame(width: screen.width, height: screen.height)

Respostas

1 Asperi Oct 22 2020 at 23:42

Você precisa Bindingdo elemento do array via ObservedObject, como abaixo

ForEach(store.peopleStore.indices, id: \.self){ i in
    HStack {
        TextField("person Name", text: $store.peopleStore[i].name)