0
1

More than 1 year has passed since last update.

@Binding #SwiftUIの修飾子に関して簡単にアウトプットしてみる

Posted at

はじめに

今回は@Bindingに関してアウトプットしていく。
まだプロパティラッパーに関して若干曖昧だという人は前回の記事(@State編)を閲覧していただけるれば良い(かも)。

@Bindingの詳細

  • データバインディングができる。 = プロパティを双方向から監視する。(どちらか一方が更新されればもう一方も更新されるみたいなニュアンス)
    • @Stateから@Bindingへデータを紐づけることをプロパティへ参照を渡すとも表現される。
      • 変数に@Bindingを付与することで親子関係にあるView内の@Stateプロパティ(状態変数)もデータを共有する。
  • @stateを受け取るときは引数に$を付ける。

ソースコード

Swift
// データバインディングされたBViewの引数の値としてisCheckを渡し、そのBool値によって表示させるImageを変更する
// バインディングによってisCheckはBViewのisCheckと紐づいている
struct ContentAView: View {
    @State private var isCheck: Bool = false

    init(isCheck: Bool) {
        self.isCheck = isCheck
    }

    var body: some View {
        VStack {
            Image(Image(systemName: isCheck ? "bell.fill" : "bell.slash"))

            // AViewの子Viewとして定義
            // @stateを受け取るときは引数に$を付ける
            ContentBView(isCheck: $isCheck)
        }
    }
}

// ボタンを押したらバインディングしているBool値を反転させる
struct ContentBView: View {
    //バインディングによってAViewのisCheckのBool値を共有する
    @Binding var isCheck: Bool

    var body: some View {
        Button("切り替えボタン") {
            // toggleはBool型プロパティの値を反転させる
            isCheck.toggle()
        }
    }
}

おわりに

間違い等ありましたらコメント欄にてご指摘ください!

参考記事

開発環境

  • Xcode-14.3
  • Swift version 5.8
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1