子视图为何需要 @Binding
理解视图之间的双向数据流。
子视图为何需要 @Binding 是 CoddyKit 上的免费 SwiftUI Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SwiftUI Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SwiftUI Academy 课程共包含 4 节课。
两个视图,一份真相
当父视图拥有一个值,而子视图需要修改它时,两者必须共享一个真值来源。否则,它们就会逐渐不一致。🔗
副本的问题
如果您只是将一个值传入子视图,子视图得到的会是一个副本。编辑这个副本不会影响父视图的原始数据。
使用 @Binding
@Binding 是一种双向连接。子视图可以直接读取和写入父视图的值,中间不会产生副本。
引用,而不是副本
可以把绑定想象成遥控器。子视图并不拥有数据;它只是持有指向数据所在位置的引用。
谁拥有什么
父视图使用 @State拥有状态。子视图则通过 @Binding 借用状态。所有权始终清晰地保留在一个位置。
双向数据流
使用绑定时,变化会双向流动。父视图会更新子视图,子视图也可以更新父视图。一切都会保持同步。
子视图中的绑定
子视图会为需要修改的值声明一个绑定,并使用 @Binding 属性包装器进行标记。
struct ChildView: View {
@Binding var isOn: Bool
var body: some View {
Toggle("Lights", isOn: $isOn)
}
}SwiftUI 构建于绑定之上
您之前已经使用过绑定。Toggle、TextField 和 Slider 都接收绑定,因此能够写回您修改后的值。
为什么这很重要
绑定让您可以将一个大型屏幕拆分为多个职责明确的小型子视图,同时不会丢失共享状态。这样可以让您的代码易于复用。✨
不重复创建状态
不要将同一个值分别复制到父视图和子视图的 @State 中。这样会产生两个真值来源,并悄悄地彼此不一致。
一个来源,多个视图
让多个视图安全地编辑同一个值,这就是 @Binding 的作用。接下来的课程将展示如何连接它。
快速检查
快速检查共享状态。
回顾:共享一个真值来源
父视图拥有状态;子视图通过 @Binding 借用状态并安全地进行双向编辑。一个真值来源可以让每个视图保持同步。🎉
用 AI 导师学习 Swift — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 30
- 课程
- 120
常见问题解答
「子视图为何需要 @Binding」课时是免费的吗?
是的 — 「子视图为何需要 @Binding」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SwiftUI Academy 课程的其余内容,请升级到 CoddyKit PRO。 SwiftUI Academy 课程共包含 4 节课。
「子视图为何需要 @Binding」这节课中我会学到什么?
理解视图之间的双向数据流。 你通过在浏览器中直接运行的动手代码来练习 SwiftUI Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 SwiftUI Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 SwiftUI Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「子视图为何需要 @Binding」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 SwiftUI Academy 课中编写并运行代码吗?
能。每节 SwiftUI Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 子视图为何需要 @Binding
- 向下传递 Binding
- 构建可复用的切换行
- @State 与 @Binding