90733


iOS16からNavigationLinkのisActiveが非推奨になっています。  
しかし、新しい文法でisActiveの代わりになる書き方を見つけられません。  
どなたか解決案をお持ちでしょうか。  
ログイン成功後に自動で画面遷移などよくあるようなパターンだと思います。  
現在はNavigationLinkのisActiveで制御しています。


CC BY-SA 4.0
2022-08-23T22:38:57.633
90726
2022-08-24T10:49:48.703
2022-08-24T00:17:23.050
3060
54133
question
swift ios swiftui
iOS 16 以降で非推奨となった NavigationLink の isActive の代わりの書き方は？


`NavigationView`と`NavigationLink`の組み合わせが`Deprecated`になったので代わりに`NavigationStack`を使います。

Appleのドキュメントにあるように`NavigtionLink`の`isActive`で制御するのではなく`NavigationStack`の状態を示す配列を使ってそこに値を積むことで画面遷移をコントロールします。

[code]

    @State private var presentedParks: [Park] = []
    
    NavigationStack(path: $presentedParks) {
        List(parks) { park in
            NavigationLink(park.name, value: park)
        }
        .navigationDestination(for: Park.self) { park in
            ParkDetails(park: park)
        }
    }
    
    func showParks() {
        presentedParks = [Park("Yosemite"), Park("Sequoia")]
    }
    
[/code]

<https://developer.apple.com/documentation/swiftui/navigationstack?changes=_8>

（参考）  
<https://developer.apple.com/documentation/swiftui/migrating-to-new-
navigation-types>


CC BY-SA 4.0
2022-08-24T06:12:34.670
90729
2022-08-24T06:12:34.670
5519
90726
answer


遷移後にボタンを押すことで得るデータが必要なければ`navigationDestination(isPresented:destination:)`で実装可能です。

データが必要であれば`navigationDestination(for:destination:)`が利用可能です。

[code]

    struct ContentView: View {
      @State var isPresented = false
    
      var body: some View {
        NavigationStack {
          Button("Next") {
            isPresented.toggle()
          }
          .navigationDestination(isPresented: $isPresented) {
            Text("Next")
          }
        }
      }
    }
    
[/code]


CC BY-SA 4.0
2022-08-24T10:49:48.703
90733
2022-08-24T10:49:48.703
40856
90726
answer