@State 的限制
Limitation Of @State
我在一些文章中看到@state有很多限制
- 我们不应该将它与复杂模型一起使用,最好将它与简单的 属性 一起使用,例如字符串、布尔...等
- 我们应该在视图内部使用它。
我尝试制作一个结构模型并在内容视图(ParentView)中用@state 标记它,然后通过用@binding 包装它来将这个模型传递给它的子视图它工作得很好,
所以我不明白为什么我们仍然需要@objectbinding,因为我们可以将相同的值传递给这些子视图,如果一个改变,其他的也会改变吗?或者@objectbinding 解决的@state 的局限性是什么?
我推荐你看WWDC 2019 session: Data Flow in SwiftUI。解释得很好。它描述了在哪些情况下 @State 是完全可以接受的,在哪些情况下 ObjectBinding/EnvironmentObject 是必要的。 session 只有 37 分钟长,但它将成为您理解绑定的前后对比。请务必观看,它将节省漫长的时间 运行。
这一切都归结为了解数据的 "source of truth" 在哪里。视频中也解释了这个概念。简而言之,事实的来源是您的数据诞生的地方。如果您的变量的数据可以从其他变量中导出,那么它不是真实来源。
@State
和@BindableObject
有什么区别?
@State
:它是局部视图。它必须是 value-type(例如,结构、Int、String、Array 等)并且其存储由框架管理。
@BindableObject
:它在视图外部,它是一个参考值(例如,一个class),它的存储由您管理,让您更灵活地实现自己的逻辑。
请注意,@State
变量在制作应用程序原型时也非常有用。例如,如果您正在处理视图的布局,您可以先使用 @State
变量来简化操作。一旦您的视图完成了您想要的操作,您就可以专注于创建您的 @BindableObject
并替换您的 @State
.
我在一些文章中看到@state有很多限制
- 我们不应该将它与复杂模型一起使用,最好将它与简单的 属性 一起使用,例如字符串、布尔...等
- 我们应该在视图内部使用它。
我尝试制作一个结构模型并在内容视图(ParentView)中用@state 标记它,然后通过用@binding 包装它来将这个模型传递给它的子视图它工作得很好, 所以我不明白为什么我们仍然需要@objectbinding,因为我们可以将相同的值传递给这些子视图,如果一个改变,其他的也会改变吗?或者@objectbinding 解决的@state 的局限性是什么?
我推荐你看WWDC 2019 session: Data Flow in SwiftUI。解释得很好。它描述了在哪些情况下 @State 是完全可以接受的,在哪些情况下 ObjectBinding/EnvironmentObject 是必要的。 session 只有 37 分钟长,但它将成为您理解绑定的前后对比。请务必观看,它将节省漫长的时间 运行。
这一切都归结为了解数据的 "source of truth" 在哪里。视频中也解释了这个概念。简而言之,事实的来源是您的数据诞生的地方。如果您的变量的数据可以从其他变量中导出,那么它不是真实来源。
@State
和@BindableObject
有什么区别?
@State
:它是局部视图。它必须是 value-type(例如,结构、Int、String、Array 等)并且其存储由框架管理。
@BindableObject
:它在视图外部,它是一个参考值(例如,一个class),它的存储由您管理,让您更灵活地实现自己的逻辑。
请注意,@State
变量在制作应用程序原型时也非常有用。例如,如果您正在处理视图的布局,您可以先使用 @State
变量来简化操作。一旦您的视图完成了您想要的操作,您就可以专注于创建您的 @BindableObject
并替换您的 @State
.