SwiftUI: @propertyWrapper结合Combine打造可观察属性

SwiftUI视图刷新机制杂谈

笼统的说,属性在被改变时想要触发视图refresh,需要满足下面两种条件之一:

  1. 该对象是值类型,所有值类型都不能被修改,只能创建修改后的实例。这使得SwiftUI运行时可以捕获到这种新创建的时机,借此刷新视图。
  2. 该对象是引用类型,遵守ObservableObject协议,由其中的objectWillChange发布器被SwiftUI订阅(隐式),从而在收到对象被修改时刷新视图。

这意味着如果你用@State修饰引用类型,则不会刷新界面。Apple称这种行为是:未定义的!即: 可能刷新也可能不刷新。

大家当然都不想依赖这种未定义的行为。

在这里插入图片描述

为什么我一上来要说这些呢?因为后面会用到引用类型属性的自动刷新。

@propertyWrapper利器

Swift 5.1在为我们带来SwiftUI和Combine的同时,也为我们创建自定义属性打开方便之门。

如果你之前还在羡慕@State,@FetchRequest之类的属性修饰器的强大和便捷,那么现在则完全没有必要了: 你可以自己定制类似的属性修饰器了,而定制的不二法门就是使用

大熊猫侯佩 CSDN认证博客专家 Swift Objective-C Xcode
非自由程序员,CSDN博客认证专家。
CSDN汇编板块版主, CSDN其他开发语言大版版主。

对App、以及Cocos2D、SpriteKit游戏开饶有兴趣。目前常用的语言是ObjC、Swift、Ruby等。不过看到编程艺术、ASM、逆向和C时依然欲罢不能。虽然不是,但喜欢黑客的思维和哲学,认为社会工程学很酷,但还没有实际用来撩过妹。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页
实付 39.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值