はじめに
SwiftUIで@
がついたものをPropertyWrapper
というらしいですが、その1つに@Binding
があります。
今回は@Binding
について深ぼる記事になります。
概要
別のViewで変数を参照渡しできる
構文
@Bindingを頭につけて、あとは普通に変数宣言するだけ
@Binding var hoge: Bool
関連性
親Viewは@State、子Viewは@Binding
この図の関係を覚えておけばOK
@Stateについては下記を読んでみてください。
子Viewの定義
大きく分けて2つあると思います。
- 自身のContentViewで配置する独自View
- NavigationLinkで遷移した先のContentView
子View側で書き換えるのが前提
子ビュー側でその値を使いたいだけなら@Bindingはいらないです
C言語をやったことある人なら分かるかもしれませんが、@Bindingはポインタに近いものと認識いいと思います。
特徴
初期値を設定できない
親ビューからコンストラクタで受け取らないといけません。
次のプログラムはコンパイルエラーになります。
@Binding var isFlag: Bool = false
= false
を消せばエラーが消えます
子ビュー側で値を変えると親ビューに反映される(再レンダリングされる)
これが@Bindingの本質です。
その他
プレビューに渡す場合
プレビュー用のContentViewを作る際は通常とは違う方法にしないとコンパイルエラーになります
.constant
を使いましょう
import SwiftUI struct SecondView: View { @Binding var isFlag: Bool } struct SecondView_Previews: PreviewProvider { static var previews: some View { SecondView(isFlag: .constant(false)) } }
おわりに
最後まで見ていただきヘペトナス!
読者登録・Twitterのフォローもお願いします。