ObjectBinding和EnvironmentObject有什么区别?

时间:2019-06-08 23:21:22

标签: ios swift swiftui

当我们具有@Binding属性包装器时,@EnvironmentObject的用途是什么?我在弄清楚为什么需要@EnvironmentObject时遇到麻烦。我看了看这些贴子,但是它不是我想要的 EnvironmentObject in SwiftUI How to use BindableObjects (EnviromentObject)?

我还查看了他们的文档,这些文档太薄了。 https://developer.apple.com/documentation/swiftui/environmentobject

1 个答案:

答案 0 :(得分:18)

我将尽力进行一般性解释。我们有@State@ObjectBinding@EnvironmentObject@Binding

  1. @State-声明局部值属性。 Apple建议尽量减少使用它们,因为@State属性应仅在视图内部使用,并负责处理少量UI。
  2. @ObjectBinding-外部参考属性。实际上应该显示您的数据模型。
  3. @EnvironmentObject-与@ObjectBinding相同,但是它在整个环境中用于其他视图,而@ObjectBinding应该显式传递
  4. @Binding-定义属性不是真相来源,并且仅是对真实真相(@State, @ObjectBinding, @EnvironmentObject)的引用。从1-3点将属性之一传递到视图视图必须在子视图中将该属性声明为@Binding才能创建引用,并使用带有$符号的属性(例如MessageDetails(message: $message))来传递引用 有关更多信息,建议观看Data Flow Through SwiftUI

UPD: 决定从会话中添加一些重要内容。您可以在视图中使用@ObjectBinding@Binding,但是在这种情况下,如果需要在深视图中使用模型,则需要在所有视图中更深地传递模型。 @EnvironmentObject@Environment允许您将其传递到层次结构中的特定视图。目前还没有找到Apple的真实示例,因此请检查其会话