@State 的限制

2024-02-05

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

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

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


我推荐你观看WWDC 2019 会议:SwiftUI 中的数据流 https://developer.apple.com/videos/play/wwdc2019/226/。这是很好解释的。它描述了在哪些场景中 @State 是完全可以接受的以及在哪些场景中需要 ObjectBinding/EnvironmentObject。课程时长只有 37 分钟,但它将是您对绑定理解的前后对比。请务必观看,从长远来看这会节省时间。

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

两者有什么区别@State and @BindableObject?

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

@BindableObject:它位于视图外部,是一个参考值(例如,一个类),其存储由您管理,使您可以更灵活地实现自己的逻辑。

注意@State在构建应用程序原型时,变量也很有用。例如,如果您正在处理视图的布局,则最初可以使用@State变量使事情变得更容易。一旦您的视图满足您的要求,您就可以专注于创建您的视图@BindableObject并替换你的@State.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@State 的限制 的相关文章

随机推荐