Bindingは、@Stateなどと同じプロパティラッパーの一つで、SwiftUIのデータ管理における重要な役割を持つ。

Bindingによって、あるビューで定義した状態変数を、別のビューで扱うことができるようになる。

具体例を見ていこう。
NavigationLinkを使って2つの画面を行き来するシンプルなアプリだ。

struct ContentView: View {
    @State var order = ""
    
    var body: some View {
        NavigationView {
            VStack {
                Text(order)
                NavigationLink(destination: InputTextView(text: $order)) {
                    Text("入力")
                }
            }
        }
    }
}

まずメインとなるビューを作成し、2行目で状態変数を定義する。
この状態変数を8行目で別のビュー(InputTextView)にバインドする。

次に、バインドする状態変数を受け取る側のビューを作成する。

struct InputTextView: View {
    @Binding var text: String
    
    var body: some View {
        TextField("ここに入力してください", text: $text)
            .padding()
            .textFieldStyle(RoundedBorderTextFieldStyle())
    }
}

2行目で、プロパティに@Bindingを付けるのがポイント。

プロパティに@Bindingを付けることで、先述のとおりビューを跨いで扱うことができるようになる。

このアプリを実行し、動作確認をおこなってみる。

「入力」ボタンをタップすると次のビューに遷移する。

テキストを入力し、元の画面に戻る。

入力した値が反映されており、バインドした状態変数が2つのビューで共有されていることが分かる。