web-dev-qa-db-fra.com

Obtenez l'index dans ForEach dans SwiftUI

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.

20
Pavel

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) }
        }
    }
}
18
kontiki