Swift:属性观察器
2024-10-10 23:29:08
1、简单介绍
属性观察器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性观察器,甚至新的值和现在的值相同的时候也不例外。
可以为除了延迟存储属性之外的其他存储属性添加属性观察器,也可以通过重载属性的方式为继承的属性(包括存储属性和计算属性)添加属性观察器。
注意:
不需要为无法重载的计算属性添加属性观察器,因为可以通过 setter 直接监控和响应值的变化。
2、监测方式
可以为属性添加如下的一个或全部观察器:
- willSet在设置新的值之前调用
- didSet在新的值被设置之后立即调用
分析:
willset观察器会将新的属性值作为固定参数传入,在willSet
的实现代码中可以为这个参数指定一个名称,如果不指定则参数仍然可用,这时使用默认名称
newValue表示。类似地,didSet观察器会将旧的属性值作为参数传入,可以为该参数命名或者使用默认参数名oldValue。
注意:
willSet和didSet观察器在属性初始化过程中不会被调用,它们只会当属性的值在初始化之外的地方被设置时被调用。
3、实现例子:
class Student{
var score:Int = 0{
willSet{
print("About to set score to \(newValue)")
}
didSet{
if score > oldValue {
print("这次分数进步了 \(score - oldValue) scores")
}
}
}
}
let student = Student()
student.score = 80
student.score = 90
student.score = 100
打印结果:
About to set score to 80
进步了 80 scores
About to set score to 90
进步了 10 scores
About to set score to 100
进步了 10 scores
最新文章
- HTML5之应用缓存---manifest---缓存使用----Web前端manifest缓存
- 优化Myeclipse10 Building Workspace速度慢等问题
- html文本框(input)不保存缓存记录
- 在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案
- Linux ARM kernel Makefile and Kconfig
- 【HDU 2014 Multi-University Training Contest 1 1002】/【HDU 4862】Jump
- QML Object Attributes QML对象属性
- Log4j使用笔记:每天生成一个日志文件、按日志大小生成文件
- Python3+Selenium2完整的自动化测试实现之旅(四):Selenium-webdriver操作浏览器、Cookie、鼠标键盘、警示框、设置等待时间、多窗口切换
- H5海报制作实践
- jQuery 学习(1)——认识jQuery
- rpc和http
- Linux查看版本
- 【BZOJ1064】【NOI2008】假面舞会(图论,搜索)
- 【iCore1S 双核心板_ARM】例程一:ARM驱动三色LED
- hIve—timestamp时间戳问题
- Java 打包下载服务器上选中的文件或目录(带进度条提示)
- php 文件上传类,功能相当齐全,留作开发中备用吧。
- BZOJ 1049 数字序列(LIS)
- mysql的.sql文件头部 /*!32312 IF NOT EXISTS*/;