GOOGLE ADS

Donnerstag, 14. April 2022

Mischen Sie in einer ForEach SwiftUI

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 StoryArtikel entsprechen bereits Identifiable.

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...