为了监听属性的变化,Swift提供了属性观察者。属性观察者能够监听存储属性的变化,即便变化前后的值相同,它们也能监听到。
属性观察者主要有以下两个:
属性观察者的语法格式如下:
面向对象类型类型名 {
... var存储属性:属性数据类型=初始化值{ willSet(新值){//定义willSet观察者。“新值”是传递给willSet观察者的参数,它保存了将要替换原来属性的新值 ... } didSet(旧值){//定义didSet观察者。“旧值”是传递给didSet观察者的参数,它保存了被新属性替换的旧值。 ... } } }
属性观察者可以在类和结构体中使用,不能在枚举中使用。
示例代码如下:
classEmployee{ varno:Int=0 varname:String="Tony"{ willSet(newNameValue){//定义name属性的willSet观察者,newNameValue是由我们分配的传递新值的参数名 print("员工name新值:\(newNameValue)") } didSet(oldNameValue){//定义name属性的didSet观察者,oldNameValue是由我们分配的传递旧值的参数名 print("员工name旧值:\(oldNameValue)") } } varjob:String? varsalary:Double=0 vardept:Department? } structDepartment{ varno:Int=10{ willSet{//定义no属性的willSet观察者,注意这里没有声明参数,但是我们可以在观察者内部使用newValue print("部门编号新值:\(newValue)") } didSet{//定义no属性的didSet观察者,注意这里也没有声明参数,但是我们可以在观察者内部使用oldValue print("部门编号旧值:\(oldValue)") } } varname:String="RESEARCH" } varemp=Employee() emp.no=100 emp.name="Smith" vardept=Department() dept.no=30
上述代码运行结果如下:
员工name新值:Smith
员工name旧值:Tony
部门编号新值:30
部门编号旧值:10
欢迎关注关东升新浪微博@tony_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com智捷课堂论坛网站:http://51work6.com/forum.php