4 votes

SwiftUI - Incrémenter une variable dans une boucle ForEach

J'ai ceci dans mon ContentView :

List {
    ForEach(items) { Item in
        ItemView(cellColor: self.$cellColor, title: item.title, orderId: "\(item.orderId)")
    }
}

Je veux mettre à jour une variable, disons en lui ajoutant 1, à chaque itération de la boucle, mais je n'arrive pas à faire en sorte que SwiftUI le fasse. Quelque chose comme ça :

var a: Int = 1
List {
    ForEach(toDoItems) { toDoItem in
        ToDoItemView(cellColor: self.$cellColor, title: toDoItem.title, orderId: "\(toDoItem.orderId)")
        a = a + 1
    }
}

Mais ça ne marche pas. Je m'excuse si je n'ai pas posé cette question dans le bon format. C'est ma première question ici !

6voto

RPatel99 Points 149

Créez une fonction qui renvoie la vue que vous voulez dans le ForEach et qui incrémente également la variable.

struct ContentView: View {
    @State var a: Int = 1
    @State var cellColor: CGFloat = 0.0 // or whatever this is in your code
    var body: some View {
        List {
            ForEach(toDoItems) { toDoItem in
                self.makeView(cellColor: self.$cellColor, title: toDoItem.title, orderId: "\(toDoItem.orderId)")
            }
        }
    }
    func makeView(cellColor: Binding<CGFloat>, title: String, orderId: String) -> ToDoItemView {
        self.a += 1
        return ToDoItemView(cellColor: cellColor, title: title, orderId: orderId)
    }
}

Vous n'avez pas précisé les types de cellColor , title et orderId donc j'ai juste deviné à partir du contexte du reste de votre code. Vous devriez être en mesure d'ajuster les types assez facilement, mais si ce n'est pas le cas, identifiez les types des variables dans votre question ou dans les commentaires de cet article et je pourrai mettre à jour ma réponse (mais je suis presque sûr que les types sont corrects).

Modifier : Apparemment cellColor est un CGFloat et non un Color selon le commentaire de l'OP, donc j'ai mis à jour mon code pour refléter cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X