【SwiftUI】@Bindingの基本的な使い方 (PropertyWrapper)

SwiftUI

はじめに

SwiftUIで@がついたものをPropertyWrapperというらしいですが、その1つに@Bindingがあります。

今回は@Bindingについて深ぼる記事になります。

概要

別のViewで変数を参照渡しできる

構文

@Bindingを頭につけて、あとは普通に変数宣言するだけ

@Binding var hoge: Bool 

関連性

親Viewは@State、子Viewは@Binding

この図の関係を覚えておけばOK

@Stateについては下記を読んでみてください。

www.m2game.net

子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のフォローもお願いします。