在SwiftUI中,@Environment和@Environment对象有什么区别?
从我从文档中发现的信息来看,@Environment似乎是用于像ColorScheme这样的全局依赖项。但我找不到它们之间的任何精确区别。例如,它们可以互换使用吗?
发布于 2020-05-07 00:39:56
这是我为自己准备的笔记。可能很有用,
@EnvironmentObject
类似于@ObservedObject
@Published来通知主动使用
@EnvironmentObject而不是@ObservedObject。设置要在V1中传递的数据,并在V5(或需要的任何位置)中检索它。代码将非常简单,它将同时只包含一种类型的实例,完全基于视图( environment.
@Environment
谢谢!
发布于 2021-04-05 08:13:05
我想在别人的回答中添加一些东西。
@Environment是value类型,但@EnvironmentObject是引用类型。
在@EnvironmentObject.If中,您只能使用对象的单个实例。如果添加另一个对象实例,它将替换上一个实例。
但是,作为@Environment键值对,只需确保键不同即可。
您只需要使用@EnvironmentObject var object: Object让对象从环境中检索实例,并通过.environmentObject(Object())注入实例
另一方面,有许多预定义的@Environment系统管理的环境值。您也可以创建自定义的。需要符合EnvironmentKey的struct类型。
这里是一个示例,
struct SunlightKey: EnvironmentKey {
static var defaultValue: Double = 1.09
}然后将其作为其扩展添加到EnvironmentValues中。
这里是一个基本的示例
extension EnvironmentValues {
var sunlight: Double {
get { self[SunlightKey.self] }
set { self[SunlightKey.self] = newValue }
}
}然后,像这样使用它,视图文件中的@Environment(\.sunlight) var sunlight和通过.environment(\.sunlight, 4.05)注入值
希望,这很有帮助
发布于 2019-09-23 20:41:56
@Enviroment允许您访问属性的值,例如用户设置(例如,配色方案、布局方向等)或视图的属性,如EditMode或PresentationMode。@EnviromentObject由您定义,可用于所有视图,对它的更改会驱动您的视图更新。
https://stackoverflow.com/questions/58061910
复制相似问题