当我们具有@Binding属性包装器时,@EnvironmentObject的用途是什么?我在弄清楚为什么需要@EnvironmentObject时遇到麻烦。我看了看这些贴子,但是它不是我想要的 EnvironmentObject in SwiftUI How to use BindableObjects (EnviromentObject)?
我还查看了他们的文档,这些文档太薄了。 https://developer.apple.com/documentation/swiftui/environmentobject
答案 0 :(得分:18)
我将尽力进行一般性解释。我们有@State
,@ObjectBinding
,@EnvironmentObject
和@Binding
。
@State
-声明局部值属性。 Apple建议尽量减少使用它们,因为@State
属性应仅在视图内部使用,并负责处理少量UI。@ObjectBinding
-外部参考属性。实际上应该显示您的数据模型。@EnvironmentObject
-与@ObjectBinding相同,但是它在整个环境中用于其他视图,而@ObjectBinding应该显式传递@Binding
-定义属性不是真相来源,并且仅是对真实真相(@State, @ObjectBinding, @EnvironmentObject
)的引用。从1-3点将属性之一传递到视图视图必须在子视图中将该属性声明为@Binding
才能创建引用,并使用带有$
符号的属性(例如MessageDetails(message: $message)
)来传递引用
有关更多信息,建议观看Data Flow Through SwiftUI UPD:
决定从会话中添加一些重要内容。您可以在视图中使用@ObjectBinding
和@Binding
,但是在这种情况下,如果需要在深视图中使用模型,则需要在所有视图中更深地传递模型。 @EnvironmentObject
和@Environment
允许您将其传递到层次结构中的特定视图。目前还没有找到Apple的真实示例,因此请检查其会话