首页 > 解决方案 > @State 的限制

问题描述

我在一些文章中看到@state 有很多限制

我尝试制作一个结构模型并在内容视图(ParentView)中用@state 标记它,并通过用@binding 包装它来将此模型传递给它的子视图,它工作得很好,所以我不明白为什么我们仍然需要@objectbinding因为我们可以将相同的值传递给这些子视图,如果其中一个发生变化,其他的也会发生变化?或者@objectbinding 解决的@state 的限制是什么?

标签: swiftuiswift5

解决方案


我建议您观看WWDC 2019 会议:SwiftUI 中的数据流。解释得很好。它描述了在哪些情况下@State 是完全可以接受的,而在哪些情况下需要 ObjectBinding/EnvironmentObject。会议只有 37 分钟,但它将是您对绑定的理解的前后。请务必观看,从长远来看,它将节省时间。

这一切都归结为了解数据的“真相来源”在哪里。这也是视频中解释的概念。简而言之,事实的来源是您的数据诞生了。如果你的变量的数据可以从其他变量中导出,那么它就不是事实的来源。

@State和 和有什么不一样@BindableObject

@State: 它是本地视图。它必须是值类型(例如,结构、整数、字符串、数组等),并且其存储由框架管理。

@BindableObject:它在视图之外,它是一个参考值(例如,一个类),它的存储由您管理,让您更灵活地实现自己的逻辑。

请注意,@State在为您的应用程序制作原型时,变量也很棒。例如,如果您正在处理视图的布局,则最初可以使用@State变量来使事情变得更容易。一旦您的视图实现了您想要的,您就可以专注于创建@BindableObject和替换您的@State.


推荐阅读