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

Swift - 属性观察者(willSet与didSet)

2016-06-23 15:57 344 查看
//: Playground - noun: a place where people can play

//import UIKit
//
//var str = "Hello, playground"

/*
属性观察者,类似于触发器。用来监视属性的初始化之外的属性值变化,当属性值发生改变时可以对此做出响应。有如下特点
1.不仅可以在属性值改变后触发didSet,也可以在属性值改变前触发willSet。
2.给属性添加观察者必须要声明清楚属性类型,否则编译器报错
3.willSet可以带一个newName的参数,没有的话,该参数默认命名为newValue
4.didSet可以带一个oldName的参数,表示旧的属性,不带的话默认命名为oldValue
5.属性初始化时,willSet和didSet不会调用。只有在初始化上下文之外,当设置属性值时才会调用
6.即使是设置的值和原来的值相同,willSet和didSet也会调用
*/

class People
{
// 普通属性
var firstName:String = ""
var lastName:String = ""
var nickName:String = ""

// 计算属性
var fullName:String{
get{
return nickName + " " + firstName + " " + lastName
}
}

// 带属性监视器的普通属性
var age:Int = 0 {
// 我们需要在age属性变化前做点什么
willSet{
print("Will set an new value \(newValue) to age")
}
// 我们需要在age属性发生变化后,更新一下nickname这个属性
didSet{
print("age filed changed from \(oldValue) to \(age)")
if age<10 {
nickName = "Little"
}else{
nickName = "Big"
}
}
}

func toString() -> String {
return "Full Name:\(fullName)" + ", Age:\(age)"
}
}

let me = People()
me.firstName = "Zhang"
me.lastName = "San"
me.age = 22
print(me.toString()) //Full Name:Big Zhang San, Age:22
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  swift