Overview
概要
Use a binding to create a two-way connection between a property that stores data, and a view that displays and changes the data. A binding connects a property to a source of truth stored elsewhere, instead of storing data directly.
バインディングを使って双方向接続を、データを格納するあるプロパティ、そしてデータを表示および変更するあるビューの間で作成してください。バインディングは、あるプロパティをどこか他で格納される信頼できる情報源に接続します、データを直接に格納することなしに。
For example, a button that toggles between play and pause can create a binding to a property of its parent view using the Binding
property wrapper.
struct PlayButton: View {
@Binding var isPlaying: Bool
var body: some View {
Button(isPlaying ? "Pause" : "Play") {
isPlaying.toggle()
}
}
}
The parent view declares a property to hold the playing state, using the State
property wrapper to indicate that this property is the value’s source of truth.
struct PlayerView: View {
var episode: Episode
@State private var isPlaying: Bool = false
var body: some View {
VStack {
Text(episode.title)
.foregroundStyle(isPlaying ? .primary : .secondary)
PlayButton(isPlaying: $isPlaying)
}
}
}
When PlayerView
initializes PlayButton
, it passes a binding of its state property into the button’s binding property. Applying the $
prefix to a property wrapped value returns its projectedValue
, which for a state property wrapper returns a binding to the value.
PlayerView
がPlayButton
を初期化する時、それはそれの状態プロパティのバインディングをボタンのもつバインディングプロパティへと渡します。$
接頭辞をプロパティラップ値に適用することは、それのprojectedValue
を返します、それはある状態プロパティラッパーに対して、その値へのバインディングを返します。
Whenever the user taps the PlayButton
, the PlayerView
updates its isPlaying
state.
ユーザがPlayButton
をタップする時はいつでも、PlayerView
はそれのisPlaying
状態を更新します。