swift外部只读属性

2017-08-17  本文已影响302人  CoffeeKid

iOS中经常看到一些系统类的属性是get-only的,一旦你想对它进行修改,编译器就会提示Cannot assign to property: 'i' is a get-only property。顺着提示的思路,我们知道这个属性只读的,也就是只有getter没有setter,真实的数据由其他属性储存,且那个属性是私有的,这个只读属性只是它的外部接口。那我们设计的时候就可以像这样:

方法一

class Class {
    private var _i: Int = 0
    var i: Int {
      get {
         return _i
      }
    }
}

这样,我们就可以保护_i属性不被外部修改了。当你在外部试图修改对i进行修改时,编译器会提示Cannot assign to property: 'i' is a get-only property,这样我们就首先了成员变量(属性)外部只读的功能了。
然而,每次都为了一个只读属性写这么长一串代码,显然有些费事。查阅资料以后,我发有一种简单写法:

方法二

class Class {
    private(set) var i: Int = 0
}

外部试图对i进行修改时,编译器会提示Cannot assign to property: 'i' setter is inaccessible。这和前面的提示有点区别,区别在于:方法一没有setter,只有getter;方法二有setter,但set方法不能被调用。实际使用中这两种方法是没有太大区别的,如果你们知道些其他需要注意的,欢迎补充。
通过上面两个的实验对比,我们能知道官方的get-only属性确实是用方法一实现的,但实际使用过程中,为了代码简洁性,建议使用方法二

上一篇 下一篇

猜你喜欢

热点阅读