Wenn ich eine sehr einfache ForEach-Schleife mache, kann ich einen Shuffle-Parameter verwenden, um die Dinge darin zu mischen.
Etwas verlinken:
var plays: [Play] = playData
var body: some View {
NavigationView {
ScrollView {
ForEach(plays.shuffled()) { item in
NavigationLink {
PlayDetailView(play: item)
} label: {
PlayCard(play: item)
.padding(.vertical, 7)
}
}
}
Aber wenn ich ein Environment-Objekt verwende und innerhalb der Schleife etwas anderes aufrufe, habe ich nicht die Möglichkeit, Dinge zu mischen.
Kann mir jemand in die richtige Richtung zeigen, um die Ergebnisse der folgenden Schleifen zu mischen?
var body: some View {
LazyVGrid(columns: [GridItem(.adaptive(minimum: 160), spacing: 15)]) {
ForEach(0..<modelData.stories.count, id: \.self) { item in
if modelData.stories[item].featured == true {
NavigationLink {
StoryDetails(story: modelData.stories[item])
} label: {
GeneralCard(story: modelData.stories[item])
}
}
}
}
}
Hier die Modelldaten:
struct Story: Hashable, Codable, Identifiable {
var id: Int
var title: String
var description: String
var featured: Bool
var paid: Bool
var featuredImage: String
var bigImage: String
var text: [String]
var category: Category
}
Lösung des Problems
Sie erstellen einen geschlossenen Bereich und iterieren darüber, indem Sie über den Index auf die Daten zugreifen. Das ist an sich keine gute Praxis. Es wäre einfacher, wenn Sie die Sammlung selbst durchlaufen.
ForEach(modelData.stories.shuffled()) { story in
if story.featured == true {
NavigationLink {
StoryDetails(story: story)
} label: {
GeneralCard(story: story)
}
}
Den Initializer mit der ID brauchst du hier nicht. Ihre Story
Artikel entsprechen bereits Identifiable
.
Keine Kommentare:
Kommentar veröffentlichen