@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 持有。子视图中的步进器通过绑定修改这个值,父视图的文本也会随之更新。@State 持有一个值;@Binding 从其他地方借用一个值。
挑战
中等ThemeToggle 应切换父视图的 darkMode。将它的属性改为 @Binding,把 Toggle 绑定到该属性,并从 ContentView 传入 $darkMode。开关打开时,文本必须显示 Dark theme。
亲手试试
import SwiftUI
@main
struct CoddyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
SwiftUI 入门中的所有课
自己练习: SwiftUI 在线编辑器