知识卡片

属性观察器是语言内置的观察者模式

专业/工作 · 717.a

内容

willSet/didSet 让”某个属性一旦被赋新值就自动触发一段响应逻辑”这件事不需要额外写一个观察者类、手动注册/通知,直接挂在属性声明处即可,即使赋的是和当前值相同的值也照样触发(不做变化检测)。willSet 在赋值发生前拿到即将写入的新值,didSet 在赋值发生后拿到刚被替换掉的旧值,二者天然覆盖了”变化前/变化后要做什么”这两类场景(如更新前记日志、更新后联动刷新界面)。发散:这相当于把观察者模式里”谁来订阅、如何通知”这部分脏活交给了编译器,业务代码只需要声明”值变了之后要做什么”,是语言层面吸收常见设计模式、把样板代码压缩为语法糖的一个例子。

参考来源

《Swift全解析:新式iOS实战开发》第11章《Swift属性》