美文网首页
swift外部只读属性

swift外部只读属性

作者: CoffeeKid | 来源:发表于2017-08-17 10:33 被阅读302次

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

    相关文章

      网友评论

          本文标题:swift外部只读属性

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