2 Star 23 Fork 10

小弟调调/swiftui-example

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
README.md 1.52 KB
一键复制 编辑 原始数据 按行查看 历史

什么是 @Environment 属性包装器?

SwiftUI 给我们提供了 @Environment@EnvironmentObject 属性包装器,但是它们有些微的不同:@EnvironmentObject 允许我们向环境中注入任意值,而 @Environment 专门用于处理 SwiftUI 自己的预定义键。

例如,@Environment 非常适合读取诸如 Core Data 受管对象上下文之类的信息,设备是处于暗模式还是亮模式,使用何种尺寸类渲染视图以及更多–来自系统的固定属性 。 在代码中,它看起来像这样:

@Environment(\.horizontalSizeClass) var horizontalSizeClass
@Environment(\.managedObjectContext) var managedObjectContext

另一方面,@EnvironmentObject 设计用于从环境中读取任意对象,如下所示:

@EnvironmentObject var order: Order

这种差异听起来很小,但由于实现 @EnvironmentObject 的方式而非常重要。 当我们说 order 的类型是 Order 时, SwiftUI 将在其环境中查找该类型的对象并将其附加到 order 属性。 但是,使用 @Environment 时,无法实现相同的行为,因为许多事物可能共享相同的数据类型。

例如:

@Environment(\.accessibilityReduceMotion) var reduceMotion
@Environment(\.accessibilityReduceTransparency) var reduceTransparency
@Environment(\.accessibilityEnabled) var accessibilityEnabled

所有这三个环境键都返回一个布尔值,因此,如果不指定确切的键,则意味着无法正确读取它们。

Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Swift
1
https://gitee.com/jaywcjlove/swiftui-example.git
git@gitee.com:jaywcjlove/swiftui-example.git
jaywcjlove
swiftui-example
swiftui-example
main

搜索帮助