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 "__鲸_"
    }

不难发现这是一个闭包,闭包执行就是加个(),就这么简单。

上一篇下一篇

猜你喜欢

热点阅读