Estoy intentando llamar a una función en una estructura (vista swiftui) que agrega un elemento a una matriz que luego se asigna a una lista. Se llama a la función en una subvista, pero sigo recibiendo el error "No se puede usar un miembro mutante en un valor inmutable: 'self' es inmutable".

Aquí está la función en el padre:

mutating func addNote(note: String){
        var newNotes = notes;
        newNotes.append(note);
        notes = newNotes;
    }

Dentro del cuerpo tiene:

List {
      ForEach(notes, id: \.self) { string in
             Section(header: Text("1/22/20")){
                 Text(string)
             }
       }...

Para pasar la función a la subvista, intento esto:

NavigationLink(destination: AddNoteView(delegate: addNote)) {
            Text("Add note")
}

Y mi addNoteView () se ve así:

struct AddNoteView : View {
    @State var note: String = ""
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
    var delegate: (String) -> ()
    var body: some View {
        NavigationView{
            Form{
                Section(header: Text("Note")){
                    TextField("Note", text:$note)
                }
                Section(){
                    Button(action: {
                            delegate(note)
                            presentationMode.wrappedValue.dismiss()}){
                       Text("Add note")

                    }

¿Alguien tiene alguna idea de lo que estoy haciendo mal? ¡Muchas gracias!

1
Charles Pettis 22 ene. 2021 a las 19:31

1 respuesta

La mejor respuesta

La vista SwiftUI es una estructura que no puede mutar desde dentro de sí mismo. Haz que notes sea @State y luego puedes usar

    @State var notes: [String] = []

    // .. other code

    func addNote(note: String) {
        notes.append(note)
    }
2
Asperi 22 ene. 2021 a las 16:39