gpt4 book ai didi

swiftui - @State 的限制

转载 作者:行者123 更新时间:2023-12-02 03:12:48 24 4
gpt4 key购买 nike

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

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

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

最佳答案

我推荐你观看WWDC 2019 session: Data Flow in SwiftUI 。这是很好解释的。它描述了在哪些场景中 @State 是完全可以接受的以及在哪些场景中需要 ObjectBinding/EnvironmentObject。类(class)时长只有 37 分钟,但它将是您对绑定(bind)理解的前后对比。请务必观看,从长远来看这会节省时间。

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

@State@BindableObject 有什么区别?

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

@BindableObject:它位于 View 外部,是一个引用值(例如,一个类),其存储由您管理,为您提供更大的灵活性实现您自己的逻辑。

请注意,@State 变量在构建应用程序原型(prototype)时也非常有用。例如,如果您正在处理 View 的布局,则最初可以使用 @State 变量来使事情变得更容易。一旦您的 View 执行了您想要的操作,您就可以专注于创建 @BindableObject 并替换您的 @State

关于swiftui - @State 的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57120991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com