SwiftUI 基础之@State @Binding @ObservedObject @EnvironmentObject区别

@State:

被修饰的属性会被自动转换成一对setter和getter,并且对这个属性赋值的时候会触发View的刷新,body会被再次调用,它申明的类型为值类型,因此他不适合在不同对象间传递,状态值将会遵守值语义发生复制。

@Binding:

它做的事情是将值语义的属性“转换”为引用语义。对被声明为 @Binding 的属性进行赋值,改变的将不是属性本身,而是它的引用,这个改变将被向外传递。(解决@State的限制,用于不同试图之间的参数传递)。

@ObservedObject:

(引用类型,处理更复杂的数据类型) 被修饰的对象必须要实现 ObservableObject 协议,SwiftUI 会追踪 View 里面经过 @ObservableObject 修饰过的对象,当该对象里被 @Published 修饰的属性变换时,SwiftUI 会更新相关联的 UI。

@Published: 被@Published修饰的属性发生变更时,会自动调用objectWillChange.send()这个方法,否则需要自己手动调用 objectWillChange.send()这个方法。

@EnvironmentObject:

应用于“跳跃式”跨越多个 View 层级的状态(有点类似于单例),避免像ObservedObject一层一层的传递数据。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容