SwiftUI ForEach Statement mit unterschiedlichen NavLinks?

1 Antwort

Du kannst die Views in ein Array packen und über dieses iterieren.

private let linkTargets: [View] = [
  View0(),
  View1(),
  View2()
]

var body: some View {
  ForEach(linkTargets) { linkTarget in
    NavigationLink(destination: linkTarget)
  }
}

Wenn jeder Link noch einen eigenen Text erhalten soll, könnte man Text und View stattdessen in einem struct kapseln:

private struct Link {
  let target: View
  let title: String
}

und das Array mit Objekten dieses Typs füllen. Innerhalb der Schleife würde man dann natürlich auf die einzelnen Felder des aktuellen Eintrags zugreifen.

Allerdings würde ich das gesamte Vorgehen auch einmal hinterfragen, denn wenn du diese drei Links einfach so ohne Schleife o.ä. hintereinander schreiben würdest, bräuchtest du nur drei Zeilen Code.