您的位置:首页 > 移动开发 > Swift

Swift—属性观察者-备

2016-05-03 10:32 218 查看
为了监听属性的变化,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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: