Menu
CoddyTech

@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 从其他地方借用一个值。

challenge icon

挑战

中等

ThemeToggle 应切换父视图的 darkMode。将它的属性改为 @Binding,把 Toggle 绑定到该属性,并从 ContentView 传入 $darkMode。开关打开时,文本必须显示 Dark theme。

亲手试试

import SwiftUI

@main
struct CoddyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

SwiftUI 入门中的所有课

自己练习: SwiftUI 在线编辑器