Modification des données de structure dans un ForEach dans SwiftUI

Sep 07 2020

J'ai une structure qui décrit les données, puis une classe qui a un tableau des structures.

struct Example: Codable, Identifiable {
     var id: UUID

     var title: String
     var description: String?

     var tags: [String]
}

class Examples: ObservableObject {
     @Published var examples = [Example]()
}

Ensuite, j'ai un ForEach qui affiche les données avec un bouton:

ForEach(examples.examples) { example in
     VStack {
         Button("Complete") {
            example.completed = true
         }
         Text(example.title)
     }
}

Quand j'essaye de courir, cela me donne l'erreur "Impossible d'assigner à la propriété: 'exemple' est une constante 'let'." J'ai essayé de passer l'exemple dans une vue séparée avec une variable @Binding (de ce post ) et de modifier également les données avec un index (de ce post ), mais les deux me donnent une erreur disant que Xcode n'a pas pu produire de diagnostic faire rapport et déposer des commentaires. Comment puis-je modifier les données?

Désolé si c'est une mauvaise question, je suis assez nouveau sur SwiftUI

Réponses

1 pawello2222 Sep 07 2020 at 05:56

En effet, un ForEach vous renvoie une copie en lecture seule de l'original examplesur lequel opérer et vous ne pouvez pas le modifier. Et même si vous le pouviez, ce ne serait pas la même structure (les structures sont des types valeur).

Vous devez accéder à l'élément d'origine à la place:

var body: some View {
    ForEach(examples.examples.indices) { index in
        VStack {
            Button("Complete") {
                examples.examples[index].completed = true
            }
            Text(examples.examples[index].title)
        }
    }
}