swift随笔 属性
2017-09-08 本文已影响17人
Rokkia
1.存储型属性
这种属性就是最简单的一种属性
class PropertyProtocol{
var name:String = "haha"
}
用法也很简单
let property = PropertyProtocol()
property.name = "1ran"
print("property is \(property.name)")
2.计算性属性 setter & getter
这种属性是对某个属性执行set | get操作前,先进行操作,然后在返回 | 存储数据
这里有个很让人不爽的地方 。
var age:Int{
#想要在给age赋值的时候 增加5
set{
}
#返回age的时候直接返回
get{
}
}
这里有个很疑惑的问题,set中如果直接使用age = newValue + 5,这时候编译器会提示,按照提示的结果是
set{
self.age = newValue + 5
}
但是当你编译的时候,很开心,报错了,get中同理。
于是,查了一下资料,上面说,要定义另外一个变量来接收他,于是变成了这样
private var _age: Int = 0
var age:Int{
#想要在给age赋值的时候 增加5
set{
_age = newValue + 5
}
#返回age的时候直接返回
get{
return _age
}
}
3.类型属性
看很多资料说在属性前面class 就OK了,亲测并不行,后来才发现3.0后改成了 static
static var Level:Int = 0
用起来也很干爽
PropertyProtocol.Level = 20
print("class property is\(PropertyProtocol.Level)")
4.属性监视器
这个跟set get很像,不一样的是,这个可以监听到赋值的时机。
var observer_value:Int = 0{
#这里会自带newValue
willSet{
print("will Set newValue :\(newValue) now value: \(observer_value)")
}
#这里会自带一个oldValue
didSet{
print("this is old value\(oldValue) this is new value \(observer_value)")
}
}
看一下使用过程
property.observer_value = 20
提一句,set | get 与willSet | didSet不能共存哦
5.懒加载
这个地方是最有意思的,其实懒加载是执行了的一个闭包操作
lazy var lazy_test:String = { ()->(String) in
return "__鲸_"
}()
看着很奇怪吧 ,我们来拆分一下
{ ()->(String) in
return "__鲸_"
}
不难发现这是一个闭包,闭包执行就是加个(),就这么简单。