通过 @Environment 共享模型
将模型注入视图环境。
通过 @Environment 共享模型 是 CoddyKit 上的免费 SwiftUI Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SwiftUI Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SwiftUI Academy 课程共包含 4 节课。
跨越多层共享
在每个中间视图之间传递模型很快就会变得繁琐。environment 允许深层子视图直接访问模型。
environment 是什么
environment 是一组沿视图树向下传递的共享值,因此任何后代视图都能读取祖先放入其中的值。
使用 .environment 注入
在父视图上使用 .environment 修饰符,将可观察模型放入视图树。
ContentView()
.environment(model)使用 @Environment 读取
子视图可以声明带有 @Environment 包装器和模型类型的属性,以读取共享模型。
@Environment(Counter.self) private var model按类型匹配
environment 会根据模型的类型查找它,因此注入的类型必须与子视图请求的类型匹配。
无需手动传递
子视图不再需要通过每个初始化器接收模型。需要时,它们只需从 environment 中取出模型。
使用共享模型
读取 environment 模型后,它的行为与其他模型一样:读取其值并调用其方法。
Text("\(model.count)")
Button("Add") { model.increment() }一个实例,多个读取者
所有视图读取的都是注入的同一个实例,因此一个屏幕上的修改会显示在所有读取它的地方。
在高层注入一次
在视图树的顶部附近注入模型,通常是在应用根视图中,这样下面的每个屏幕都能共享它。
WindowGroup {
RootView().environment(model)
}所有者仍使用 @State
仍由一个视图使用 @State 拥有模型并注入它。environment 只负责将这个单一实例向下共享。
缺少模型会导致崩溃
如果子视图读取了 environment 从未接收的模型,应用就会崩溃,因此务必在任何读取者出现前完成注入。
快速检查
最后检查一下通过 environment 共享模型的方式。
回顾
您使用 @Environment 在整个视图树中共享一个模型:在高层注入它,然后在任意后代视图中按类型读取它。🌍
用 AI 导师学习 Swift — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 30
- 课程
- 120
常见问题解答
「通过 @Environment 共享模型」课时是免费的吗?
是的 — 「通过 @Environment 共享模型」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SwiftUI Academy 课程的其余内容,请升级到 CoddyKit PRO。 SwiftUI Academy 课程共包含 4 节课。
「通过 @Environment 共享模型」这节课中我会学到什么?
将模型注入视图环境。 你通过在浏览器中直接运行的动手代码来练习 SwiftUI Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 SwiftUI Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 SwiftUI Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「通过 @Environment 共享模型」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 SwiftUI Academy 课中编写并运行代码吗?
能。每节 SwiftUI Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 从视图状态到模型类
- @Observable 宏
- 使用 @State 管理自有对象
- 通过 @Environment 共享模型