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
属性观察者主要有以下两个:
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
相关文章推荐
- Swift—计算属性-备
- Swift--存储属性-备
- Swift--访问级别-备
- Swift 总结使用问号(?)和感叹号(!)-备用
- Swift 可选类型-备
- Swift 可选链-备
- Swift类和结构体定义-备
- swift枚举
- swift闭包-备
- swift中的&-备
- swift开发多线程篇 - 多线程基础
- Swift快速入门之可选类型与错误处理
- Yii2使用swiftmailer发送邮件的方法
- 添加PCH文件以及自定义输出(OC & Swift)
- Swift中数组集合-b
- swift字典集合-备
- Swift字符串的插入、删除和替换-备
- 10个惊艳的Swift单行代码
- 聊聊 Swift 3.0 - 新版本对我们的影响
- Swift编写Android应用程序入门