class People: NSObject {
//普通属性
var firstName:String = "";
var secondName:String = "";
var nickName:String = "";
init(afirstName:String,aSecondName:String,aNickName:String,aAge:Int) {
self.firstName = afirstName
self.secondName = aSecondName
self.nickName = aNickName
self.age = aAge
}
//与其他大部分编程语言不同,Swift 并不强制要求你在每条语句的结尾处使用分号(;),当然,你也可以按照你自己的习惯添加分号。有一种情况下必须要用分号,即你打算在同一行内写多条独立的语句:
//计算属性
var fullName:String
{
get{
return firstName+secondName+nickName
}
}
//带属性监视器的普通属性
var age:Int = 0
{
willSet//age属性变化前
{
print("willSet=============\(newValue)")
}
didSet//age属性变化后
{
print("didSet=========\(oldValue)")
if age>10 {
nickName = "大"
} else {
nickName = "小"
}
}
}
func peopleFunc() -> String {
return "fullName============\(fullName)age============\(age)"
}
}
属性观察者,类似于触发器。用来监视属性的除初始化之外的属性值变化,当属性值发生改变时可以对此作出响应。有如下特点:
1,不仅可以在属性值改变后触发didSet,也可以在属性值改变前触发willSet。
2,给属性添加观察者必须要声明清楚属性类型,否则编译器报错。
3,willSet可以带一个newName的参数,没有的话,该参数默认命名为newValue。
4,didSet可以带一个oldName的参数,表示旧的属性,不带的话默认命名为oldValue。
5,属性初始化时,willSet和didSet不会调用。只有在初始化上下文之外,当设置属性值时才会调用。
6,即使是设置的值和原来值相同,willSet和didSet也会被调用
原文出自:www.hangge.com 转载请保留原文链接:http://www.hangge.com/blog/cache/detail_519.html
测试
let apeople = People(afirstName: "first", aSecondName: "second", aNickName: "nick", aAge: 20)
print("\(apeople.peopleFunc())");