SwiftUI Academy · 课时

通过 @Environment 共享模型

将模型注入视图环境。

第 4 / 4 课13 个步骤

通过 @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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 从视图状态到模型类
  2. @Observable 宏
  3. 使用 @State 管理自有对象
  4. 通过 @Environment 共享模型
← 返回 SwiftUI Academy