博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
swift 属性观察器
阅读量:5832 次
发布时间:2019-06-18

本文共 970 字,大约阅读时间需要 3 分钟。

概念

用来监视属性值变化,当属性值发生改变时可以对此作出响应。可以为除了延迟存储属性之外的其他存储属性添加属性观察器,也可以通过重载属性的方式为继承的属性(包括存储属性和计算属性)添加属性观察器。

  • willset 观察器会将新的属性值作为固定参数传入,在willSet的实现代码中可以为这个参数指定一个名称,如果不指定则参数仍然可用,这时使用默认名称 newValue 表示。
  • didSet 观察器会将旧的属性值作为参数传入,可以为该参数命名或者使用默认参数名 oldValue

使用

swift 属性拥有 set get 语法

var score : int {    get { return getNum() }    set { setBum(newValue) }}复制代码

willSetdidSet 分别在调用 set 方法之前和之后被调用,其意义在于有时候我们需要在存储属性时做一些事情,例如通知某个对象,这个属性被改变了。如果只有 get set 方法,我们就需要声明另外一个字段来保存改动之前的值。借助 willSetdidSet 方法就不需要额外的字段了,直接使用 newValueoldValue 就可以了。

class Student {    var score: Int = 0 {        willSet{           print("will set score to \(newValue)")        }        didSet{            print("did set score to \(oldValue)")        }    }}let student = Student()student.score = 60student.score = 99复制代码

输出

will set score to 60did set score to 0will set score to 99did set score to 60复制代码

注意

  • willSetdidSet 观察器在属性初始化过程中不会被调用,它们只会当属性的值在初始化之外的地方被设置时被调用。
  • 即使是设置的值和原来值相同,willSetdidSet 也会被调用。

转载地址:http://vcrdx.baihongyu.com/

你可能感兴趣的文章
php安装
查看>>
Laradock的xdebug在vscode上使用的配置
查看>>
类中的String,StringBuffer,冒泡排序
查看>>
SD-WAN架构如何提高网络灵活性和效率
查看>>
一位转行成功并从事5年的大数据的经验分享
查看>>
解决Tomcat启动缓慢问题
查看>>
Java线程池详解
查看>>
新手学习Linux——NFS应用场景及环境搭建
查看>>
Java进阶面试题列表 面向对象编程的基本理念与核心设计思想
查看>>
移动 电信 联通 APN cmwap cmnet ctwap ctnet 3gwap uniwap 3gnet uninet
查看>>
linux mysql errorcode 29
查看>>
专业代写文章,需要注意什么
查看>>
无线AP是什么
查看>>
本机实现域名绑定
查看>>
JDBC 基础设置
查看>>
买房博弈分析
查看>>
LINQ to SQL(2)
查看>>
安卓ProgressBar进度条使用注解
查看>>
CentOS 6.4下编译安装MySQL
查看>>
Linux系统新手学习的11点建议
查看>>