美文网首页
swift随笔 属性

swift随笔 属性

作者: Rokkia | 来源:发表于2017-09-08 17:58 被阅读17次
    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 "__鲸_"
        }
    

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

    相关文章

      网友评论

          本文标题:swift随笔 属性

          本文链接:https://www.haomeiwen.com/subject/nzhgjxtx.html