@State的局限性

时间:2019-07-20 00:55:29

标签: swiftui swift5

我在某些文章中看到@state有很多局限性

  • 我们不应该在复杂的模型中使用它,最好将它与简单的属性(例如string,bool等)一起使用
  • 我们应该在视图本身内部使用它。

我试图制作一个结构模型,并在contentview(ParentView)中用@state标记它,并通过用@binding包装它将该模型传递给它的子视图,效果很好, 所以我不明白为什么我们仍然需要@objectbinding,因为我们可以将相同的值传递给这些子视图,如果一个更改,其他视图也会更改?或@objectbinding解决的@state的局限性是什么?

1 个答案:

答案 0 :(得分:0)

我建议您观看WWDC 2019 session: Data Flow in SwiftUI。这很好解释。它描述了在哪种情况下@State是完全可以接受的,以及在哪些情况下需要ObjectBinding / EnvironmentObject。会话只有37分钟,但这将是您对绑定的理解的前后。请注意观看,从长远来看会节省时间。

一切都归结为了解数据的“真实来源”在哪里。视频中也对此概念进行了说明。简而言之,事实的根源是您的数据诞生了。如果您的变量数据可以从其他变量中得出,则它不是真理的来源。

@State@BindableObject有什么区别?

@State :它是视图的本地视图。它必须是值类型(例如struct,Int,String,Array等),并且其存储由框架管理。

@BindableObject :它在视图外部,是一个参考值(例如,一个类),其存储由您管理,为您提供了更大的灵活性来实现自己的视图逻辑。

请注意,在制作应用程序原型时,@State变量也非常有用。例如,如果您正在处理视图的布局,则可以最初使用@State变量来简化操作。视图完成所需的操作后,您就可以集中精力创建@BindableObject并替换@State