《从零开始学Swift》学习笔记(Day 33)——属性观察者

原创文章,欢迎转载。转载请注明:关东升的博客

 

为了监听属性的变化,Swift提供了属性观察者。属性观察者能够监听存储属性的变化,即便变化前后的值相同,它们也能监听到。

属性观察者主要有以下两个:

  • willSet :观察者在修改之前调用。
  • didSet :观察者在修改之后立刻调用。

属性观察者的语法格式如下:

面向对象类型 类型名 {     

    ...

    var 存储属性: 属性数据类型 = 初始化值 {

    willSet(新值) {            //定义willSet观察者。“新值”是传递给willSet观察者的参数,它保存了将要替换原来属性的新值

        ...

    }                     

    didSet(旧值) {     //定义didSet观察者。“旧值”是传递给didSet观察者的参数,它保存了被新属性替换的旧值。

        ...

    }                 

    }                 

} 

属性观察者的语法格式比计算属性要混乱。

属性观察者可以在类和结构体中使用,不能在枚举中使用。

示例代码如下:

class Employee { 

    var no: Int = 0

    var name: String = "Tony" {   

    willSet(newNameValue) {   //定义name属性的willSet观察者,newNameValue是由我们分配的传递新值的参数名

        print("员工name新值:\(newNameValue)")   

    }

    didSet(oldNameValue) {    //定义name属性的didSet观察者,oldNameValue是由我们分配的传递旧值的参数名

        print("员工name旧值:\(oldNameValue)") 

    }

    }

    var job: String?

    var salary: Double = 0

    var dept: Department?

} 

struct Department {      

    var no: Int = 10 {        

    willSet {             //定义no属性的willSet观察者,注意这里没有声明参数,但是我们可以在观察者内部使用newValue

        print("部门编号新值:\(newValue)") 

    }

    didSet {          //定义no属性的didSet观察者,注意这里也没有声明参数,但是我们可以在观察者内部使用oldValue

        print("部门编号旧值:\(oldValue)")    ⑫

    }

    }

    var name: String = "RESEARCH"

} 

var emp = Employee()

emp.no = 100

emp.name = "Smith"               ⑬

 

var dept = Department()

dept.no = 30                     ⑭

上述代码运行结果如下:

员工name新值:Smith

员工name旧值:Tony

部门编号新值:30

部门编号旧值:10

 

 

 

欢迎关注关东升新浪微博@tony_关东升
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
 

更多精品iOSCocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php

 


http://www.niftyadmin.cn/n/1036442.html

相关文章

彻底理解KMP算法!【爆肝力作 建议收藏】

大家好,前面的有一篇文章讲了子序列和全排列问题,今天我们再来看一个比较有难度的问题。那就是大名鼎鼎的KMP算法。 本期文章源码:GitHub源码 文章目录简介暴力解法(BF)KMP算法简介 KMP算法是一种改进的字符串匹配算法…

初识Java语言(六)- 多态、抽象类以及接口

前些天,我们简单地讲解了继承的概念,也理解了继承是什么。本期文章,我们将在继承的基础之上,引申出一个思想:多态。那么,多态是什么?本期文章概念居多,读者不妨多看几遍,…

初识Java语言(七)- String、StringBuilder和 StringBuffer三者之间的区别和联系!!!【建议收藏】

当我们学习了Java中的继承和多态后,现在我们就可以来学习一个非常重要的东西:String字符串,以及还有StringBuilder和StringBuffer两兄弟。我们直接发车了!!! 前期文章 前言- IDEA如何配置?让你…

《从零开始学Swift》学习笔记(Day 34)——静态属性是怎么回事?

原创文章,欢迎转载。转载请注明:关东升的博客我先来设计一个类:有一个Account(银行账户)类,假设它有3个属性:amount(账户金额)、interestRate(利率&#xff0…

初识Java语言(八)- 异常

在前期所有的文章中,我们都是假设用户输入的参数都是有效的,自己写的代码都是没有bug的。 但是在现实生活中,这并不实际。比如:登陆某一个账户,密码错误或账号错误等等,如果确实是错误了,应该向…

《从零开始学Swift》学习笔记(Day 35)——会使用下标吗?

原创文章,欢迎转载。转载请注明:关东升的博客看下面的示例代码是不是使用过:var studentList: String[] ["张三","李四","王五"]studentList[0] "诸葛亮"var studentDic…

最长回文子串问题-Manacher算法【建议收藏】

前面我们讲过一个关于字符串的算法:KMP算法。今天我们来讲另外一个字符串算法:Manacher算法。这个算法是用于解决一个问题叫:最长回文子串。 前期文章:KMP算法 牛客网OJ链接 说的简单一点,给定一个字符串&#xff0c…

《从零开始学Swift》学习笔记(Day 36)——静态方法

原创文章,欢迎转载。转载请注明:关东升的博客静态方法与静态属性类似,Swift中定义了静态方法,也称为类型方法。静态方法的定义与静态属性类似,枚举和结构体的静态方法使用的关键字是static;类静态方法使用的…