Having just revisited this navigation for SwiftUI 3 here (which updated the original approach for SwiftUI 1 here), Apple has since rethought navigation with the new NavigationStack as part of the latest SwiftUI 4 release. This is great news… and covers most of my previous suggestions!
Previously, NavigationView required explicitly defining navigation “edges” and the use of multiple flags which could lead to confusion. The new approach uses a stack creating a non-UI representation of the existing navigation and works beautifully with our previous programmatic approach without many changes.
This approach initially started with a review of a multiscreen onboarding flow with SwiftUI. As with all multiscreen data entry flows, they often represent an interesting problem of how to decouple data, view, and navigation logic.