【Swift UI】NavigationLinkの使い方!navigationDestinationとの組み合わせ

この記事からわかること
- SwiftUIのNavigationLinkとは?
- 画面遷移を実装する方法
- 複数あるイニシャライザの使い方
\ アプリをリリースしました /
環境
- Xcode:16.0
- iOS:18.0
- Swift:5.9
- macOS:Sonoma 14.6.1
SwiftUIでビューをスタック構造で管理するためのNavigationStack
において画面遷移に欠かせないNavigationLink
の使い方をまとめていきます。
NavigationLink構造体とは?
NavigationLink
はナビゲーションプレゼンテーションを制御する機能を提供する構造体です。ユーザーがボタンやテキストなどをタップした際に任意の画面に遷移させることができます。遷移機能を有効にするためにはNavigationStack
で囲われている必要があります。
インスタンス化時の引数として必要になるのはリンクの文字となるLabelと遷移先を示すViewです。
使い方
実際の使い方を見てみます。最初の引数にString
型を渡し、クロージャーの中に遷移先のビューを渡します。
これでボタンをクリックすると画面が遷移するリンクボタンを作成できます。

複数あるイニシャライザ
イニシャライザが複数用意されているので書式が様々あります。

変数の値に応じて画面遷移を動作させる
リンクボタンではなく、変数の値の変化に応じて画面遷移を動作させるにはinit(_:destination:isActive:)
を使用します。
ですがiOS13〜16以降では非推奨となっているのでnavigationDestination
への置き換えが推奨されています。
遷移先ごとに渡す値を変化させる
navigationDestination
とinit(_:value:)
を使用することで遷移先ごとに渡す値を変化させることができます。
この場合はnavigationDestination(for:)
を使用することでクリックされたNavigationLink
の値を受け取ることができます。そのためにはfor
の引数には受け取るデータ型を明示的に指定する必要があります。
公式リファレンス:navigationDestination(for:)
リンクの有効/無効を切り替える
リンクボタンは有効/無効を切り替えることもできます。無効にするにはNavigationLink
構造体にたいしてdisabled(true)
を指定します。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。