swift外部只读属性

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属性确实是用方法一实现的,但实际使用过程中,为了代码简洁性,建议使用方法二

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容