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

最新文章

  1. HTML5之应用缓存---manifest---缓存使用----Web前端manifest缓存
  2. 优化Myeclipse10 Building Workspace速度慢等问题
  3. html文本框(input)不保存缓存记录
  4. 在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案
  5. Linux ARM kernel Makefile and Kconfig
  6. 【HDU 2014 Multi-University Training Contest 1 1002】/【HDU 4862】Jump
  7. QML Object Attributes QML对象属性
  8. Log4j使用笔记:每天生成一个日志文件、按日志大小生成文件
  9. Python3+Selenium2完整的自动化测试实现之旅(四):Selenium-webdriver操作浏览器、Cookie、鼠标键盘、警示框、设置等待时间、多窗口切换
  10. H5海报制作实践
  11. jQuery 学习(1)——认识jQuery
  12. rpc和http
  13. Linux查看版本
  14. 【BZOJ1064】【NOI2008】假面舞会(图论,搜索)
  15. 【iCore1S 双核心板_ARM】例程一:ARM驱动三色LED
  16. hIve—timestamp时间戳问题
  17. Java 打包下载服务器上选中的文件或目录(带进度条提示)
  18. php 文件上传类,功能相当齐全,留作开发中备用吧。
  19. BZOJ 1049 数字序列(LIS)
  20. mysql的.sql文件头部 /*!32312 IF NOT EXISTS*/;

热门文章

  1. PHP的两种表单数据提交方式
  2. C++ 的二进制语法与语义
  3. .NET中RabbitMQ的使用
  4. 如何在IntelliJ IDEA删除Project
  5. pat甲级题解(更新到1013)
  6. PDA 收银系统PDA手持打印扫描枪 销售开单 收银 扫描打印一体机
  7. 第八章 springboot + mybatis + 多数据源
  8. VS2013 - 自定义新建文件模版
  9. 四种常见的 POST-------- content-type数据提交方式
  10. 数据分析之pandas入门