はじめに
今回は@Bindingに関してアウトプットしていく。
まだプロパティラッパーに関して若干曖昧だという人は前回の記事(@State編)を閲覧していただけるれば良い(かも)。
@Bindingの詳細
- データバインディングができる。 = プロパティを双方向から監視する。(どちらか一方が更新されればもう一方も更新されるみたいなニュアンス)
-
@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