屬性觀察者,類似于觸發器。用來監視屬性的除初始化之外的屬性值變化,當屬性值發生改變時可以對此作出響應。有如下特點:
1,不僅可以在屬性值改變後觸發didSet,也可以在屬性值改變前觸發willSet。
2,給屬性添加觀察者必須要聲明清楚屬性類型,否則編譯器報錯。
3,willSet帶一個newValue的參數,表示新的屬性。
4,didSet帶一個oldValue的參數,表示舊的屬性。
5,屬性初始化時,willSet和didSet不會調用。隻有在初始化上下文之外,當設定屬性值時才會調用。
6,即使是設定的值和原來值相同,willSet和didSet也會被調用
示例代碼
import UIKit
class Animal {
// 普通屬性
var firstName:String = ""
var lastName:String = ""
var nickName:String = ""
// 計算類屬性
var fullName:String
{
get
{
return "第一次名字:" + firstName + "最後使用的名字:" + lastName + "正在使用的:" + nickName
}
}
var age:Int = 0
{
willSet
{
print("将要設定年齡為:\(newValue)歲")
}
didSet
{
print("年齡從\(oldValue)設定為\(age)")
if age > 10
{
nickName = "John"
} else {
nickName = "Jenny"
}
}
}
func logCurrentAnimalInfo() -> String
{
// return "fullName:" + fullName + "age:" + "\(age)"
return "fullName:\(fullName),age:\(age)"
}
}
運作
func actionOne()
{
let animle = Animal()
animle.firstName = "David"
animle.lastName = "join"
animle.age = 20
let info = animle.logCurrentAnimalInfo()
print(info)
}
将要設定年齡為:20歲
年齡從0設定為20
fullName:第一次名字:David最後使用的名字:join正在使用的:John,age:20