Der Denkmodellwechsel
In UIKit ist Navigation imperativ. Du sagst dem System genau, was es tun soll:
let detailVC = DetailViewController()
detailVC.item = selectedItem
navigationController?.pushViewController(detailVC, animated: true)Du erstellst einen View Controller, konfigurierst ihn und pushst ihn auf den Stack. Du hast die Kontrolle über die Aktion.
SwiftUI funktioniert anders. Du navigierst nicht – du präsentierst Daten in neuen Views. Alles ist datengetrieben. Du kontrollierst keine Views. Du kontrollierst Daten.
Datengetriebene Navigation in der Praxis
Mit NavigationStack wird Navigation durch State gesteuert. Du deklarierst, welche Daten welcher View zugeordnet werden, und SwiftUI kümmert sich um die Übergänge:
struct ContentView: View {
@State private var path: [Item] = []
var body: some View {
NavigationStack(path: $path) {
List(items) { item in
Button(item.name) {
path.append(item) // Modify data, not views
}
}
.navigationDestination(for: Item.self) { item in
DetailView(item: item)
}
}
}
}Die Schlüsselzeile ist path.append(item). Du pushst keine View. Du fügst Daten zu einem Array hinzu. SwiftUI beobachtet die Änderung und präsentiert die entsprechende View automatisch.
Warum das wichtig ist
Diese Unterscheidung ist nicht nur philosophisch – sie hat praktische Konsequenzen. Weil Navigation State ist, bekommst du Deep Linking geschenkt, indem du das richtige Path-Array konstruierst. Du kannst den Navigationszustand persistieren und wiederherstellen, indem du den Pfad speicherst. Du kannst programmatisch zu jeder Tiefe navigieren, indem du mehrere Elemente auf einmal hinzufügst.
Es bedeutet auch, dass das Schließen einfach das Entfernen von Daten ist. path.removeLast() aufzurufen poppt die oberste View. Das Array zu leeren kehrt zum Root zurück. Kein Bedarf, View-Controller-Referenzen zu tracken oder die Navigationshierarchie zu durchlaufen.
Der Umstieg braucht Zeit zur Verinnerlichung, besonders wenn du jahrelange UIKit-Erfahrung hast. Aber sobald es Klick macht, wird SwiftUI-Navigation deutlich vorhersagbarer. Deine Views werden zu reinen Funktionen deiner Daten, und Navigation ist einfach ein weiteres Stück dieser Daten.
