@Bindingプロパティ
CoddyのSwiftジャーニー「SwiftUI入門」セクションの一部。レッスン 39/50。
画面が大きくなったら、より小さなビューに分割します。親の状態を変更する必要がある子ビューは、値を所有する代わりに@Bindingを宣言します:
struct VolumeControl: View {
@Binding var volume: Int
var body: some View {
Stepper("Volume: \(volume)", value: $volume, in: 0...10)
}
}親は@Stateを保持し、$を使ってそれへのバインディングを渡します:
struct ContentView: View {
@State private var volume = 5
var body: some View {
VStack {
VolumeControl(volume: $volume)
Text(volume == 0 ? "Muted" : "Playing")
}
}
}ContentView が所有する値が 1 つあります。子ビューのステッパーはバインディングを通じてその値を変更し、親ビューのテキストはそれに追従します。@State は値を所有し、@Binding は別の場所から値を借用します。
チャレンジ
中級ThemeToggle は親の darkMode を切り替える必要があります。そのプロパティを @Binding に変更し、Toggle をそれにバインドして、ContentView から $darkMode を渡します。トグルがオンの間は、テキストに Dark theme と表示される必要があります。
自分で試してみよう
import SwiftUI
@main
struct CoddyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
SwiftUI入門のすべてのレッスン
自分で練習してみよう: Swiftプレイグラウンド