每天学一点Swift----面向对象上(六)

2017-05-28  本文已影响6人  冯可乐同学

九.观察者属性

1.为了让程序能在属性被赋值时获得执行代码的机会,Swift提供了属性观察者机制,*******属性观察者其实就是两个特殊的回调方法:

willSet(newValue)----被观察的属性即将被赋值之前自动调用该方法。

didSet(oldValue)----被观察的属性被赋值完成之后自动调用该方法。

2.只要程序对非延迟存储的存储属性赋值----即使所赋的值与原有的值相等,属性观察者也能监听到。

3.属性观察者可以监听如下属性的改变:

(1)除了延迟存储属性之外的所有存储属性(包括实例存储属性和类型存储属性)

(2)可通过重载方式为继承得到的属性(包括存储属性和计算属性)添加属性观察者

4.不要为没有重载的、普通的计算属性添加属性观察者----因为没有意义。当程序对计算属性赋值时,计算属性的setter方法已经得到了执行,程序在setter方法中想做什么都可以。

5.定义属性观察者的语法:

[修饰符]var存储属性名:属性类型[=初始值]{

willSet(newValue){

//属性即将被赋值之前自动执行的代码

}

didSet(oldValue){

//属性被赋值之后自动执行的代码

}

}

6.定义属性观察者的代码就是在存储属性的后面添加一对花括号,在花括号中包好willSet和didSet两个部分。----这两部分都可以省略形参,Swift将会为它们各自提供一个隐式的形参

7.举个栗子:

class Person

{

//定义存储属性

var name : String = ""{

willSet{

//执行合理性校验,要求用户名必须在6--20位之间

if(countElements(newValue) < 6) || (countElements(newValue) > 20)

{

print("输入的人名不合格")

}

else

{

print("人名设置符合要求")

}

}

didSet{

print("人名设置完成,被修改的原名为:\(oldValue)")

}

var age : Int = 0{

willSet{

if newValue > 100 || newValue < 0

{

print("设置的年龄不合格")

}

else

{

print("年龄设置符合要求")

}

}

didSet{

print("年龄设置完成,被修改的年龄为:\(oldValue)")

}

}

}

上面的程序中分别为name、age设置了属性观察者,当程序改变name属性,或者age属性时,属性观察者就会发挥作用。

上一篇下一篇

猜你喜欢

热点阅读