Modification des données de structure dans un ForEach dans SwiftUI
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
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)
}
}
}