J'ai un tableau et je veux en itérer initialiser les vues en fonction de la valeur du tableau et je veux effectuer une action en fonction de l'index des éléments du tableau
Quand je parcourt des objets
ForEach(array, id: \.self) { item in
CustomView(item: item)
.tapAction {
self.doSomething(index) // Can't get index, so this won't work
}
}
J'ai donc essayé une autre approche
ForEach((0..<array.count)) { index in
CustomView(item: array[index])
.tapAction {
self.doSomething(index)
}
}
Mais le problème avec la deuxième approche est que lorsque je change de tableau, par exemple, si doSomething
suit
self.array = [1,2,3]
les vues dans ForEach
ne changent pas, même si les valeurs sont modifiées. Je crois que cela se produit parce que array.count
n'a pas changé.
Y a-t-il une solution à cela? Merci d'avance.
Cela fonctionne pour moi:
struct ContentView: View {
@State private var array = [1, 1, 2]
func doSomething(index: Int) {
self.array = [1, 2, 3]
}
var body: some View {
ForEach(0..<array.count) { i in
Text("\(self.array[i])")
.tapAction { self.doSomething(index: i) }
}
}
}