美文网首页
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外部只读属性

    iOS中经常看到一些系统类的属性是get-only的,一旦你想对它进行修改,编译器就会提示Cannot assig...

  • swift学习

    mytextField.editing 是只读属性了 3.0 对于Swift中的强制类型转换,从AnyObject...

  • iOS - 属性不被外部篡改

    当属性的修饰符为readonly,表示该属性为只读,那么能否修改这个属性的值呢? 外部通过KVC设置与禁止KVC设...

  • swift协议的{get} {get set}的区别

    swift协议的{get} {get set}的区别 如果是{get}可读属性 则该变量可以是只读属性 如果是{g...

  • swift-只读属性的坑

    var topMostViewController:UIViewController? { return self...

  • # 只读属性

    getter & setter 在 Swift 中 getter & setter 很少用,以下代码仅供了解 存储...

  • Block简单使用

    block的代码是内联的,效率高于函数调用 block对于外部变量默认是只读属性 block被Objective-...

  • iOS开发-block

    *block的代码是内联的,效率高于函数调用 block对于外部变量默认是只读属性 block被Objective...

  • iOS 让一个只读属性,内部支持读写,外部只读。

    大致思路声明属性为只读,但是重写setter赋值方法,具体实现如下: import

  • 高效的Kotlin——限制可变性

    限制可变性(Limit mutability) 只读属性 val 只读属性val可以改变,但是只读属性并没有提供修...

网友评论

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

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