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