扫码阅读
手机扫码阅读

【SwiftUI】2.特性之-@State属性包装器

102 2024-07-13

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:【SwiftUI】2.特性之-@State属性包装器
文章来源:
程序员华仔
扫码关注公众号
属性包装器概述

属性包装器概述

继介绍不透明返回类型之后,本篇文章主要探讨属性包装器(PropertyWrapper),并对其与属性代理(PropertyDelegate)进行区别。属性包装器和属性代理本质上是相同的概念,但属性代理是在Swift 5.0版本提出的,而从Swift 5.1版本开始统一称为属性包装器。本文将统一使用属性包装器这一称呼。

属性包装器现象

在Xcode项目中,我们常会遇到如@State、@StateObject等标识,它们都是属性包装器的例子。在SwiftUI中,存在多个属性包装器,每个都有其独特的含义和作用。

属性包装器罗列

以下是一些常用的属性包装器:

  • @State
  • @StateObject
  • @Binding
  • @BindableObject
  • @Published
  • @ObservedObject
  • @EnvironmentObject

文章以@State为例来分析属性包装器的内部实现原理。

@State的内部实现原理

State的源码揭示了几个关键点:

  1. 使用@propertyWrapper修饰的结构体。
  2. 提供init方法以支持声明时赋值。
  3. 计算属性的使用,最终通过wrappedValue方法来获取和设置值。
  4. 返回Binding类型的值,并遵守BindingConvertible协议,实现属性绑定。
  5. 遵守DynamicViewProperty协议,实现动态绑定视图和属性。

以上特性共同支持@State属性的绑定和动态监听。

进一步的探考

属性包装器如@State实现绑定和监听的机制基于Swift的Combine框架,该框架基于观察者模式和响应式编程。观察者模式用于维护对象间一对多的依赖关系,确保一个对象的变化能够自动通知依赖者。响应式编程则处理异步数据流及变化,将事件转换成数据流,方便进行操作和处理。

总结

属性包装器的使用目的是为了解决用户交互或数据变化时,界面的及时更新。通过数据源与视图的绑定,在数据变化时通知SwiftUI重新绘制界面,避免不必要的全局绘制和资源浪费。

END

有兴趣请关注 程序员华仔

想要了解更多内容?

查看原文:【SwiftUI】2.特性之-@State属性包装器
文章来源:
程序员华仔
扫码关注公众号