Swift只读外部读写内部属性

在Swift中,定义常见模式的常规方法是什么?在这种模式下,属性是从外部读取的,但在拥有它的类(和子类)内部可以修改。

在Objective-C中,有以下选项:

  • 在接口中声明该属性为只读属性,并使用类扩展来在内部访问该属性。 这是基于消息的访问,因此它与KVO,primefaces性等很好地配合
  • 在界面中声明属性只读,但在内部访问后援伊娃。 因为ivar的默认访问是受保护的,所以这在类层次结构中很好地起作用,其中子类也将能够修改该值,但是该字段是以其它方式只读的。

在Java中,惯例是:

  • 声明一个受保护的字段,并实现一个公共的,只读的getter(方法)。

Swift的成语是什么?

  • 禁用某些文件的自动引用计数
  • cocoapods - 使用特定的pod版本
  • 如何查看NSString是否以某个其他string开头?
  • 如何检查是否为64位构build了一个静态库?
  • 在UITableView中延迟加载图像
  • Objective C中的枚举迭代
  • 我怎样才能以简单的方式将CGPoint对象添加到NSArray?
  • 构buildiOSnetworking应用程序的最佳架构方法(REST客户端)
  • 2 Solutions collect form web for “Swift只读外部读写内部属性”

    给定一个类属性,你可以指定一个不同的访问级别,通过在属性声明前加上访问修饰符,然后在括号之间进行getset 。 例如,具有公共getter和私有setter的类属性将被声明为:

     private(set) public var readonlyProperty: Int 

    build议阅读: 吸气剂和固化剂

    Martin对可访问性级别的考虑仍然有效,即没有protected修饰符, internal限制只访问模块,只对当前文件private ,对public没有任何限制。

    Swift 3笔记

    2个新的访问修饰符,文件fileprivateopen已被添加到语言,而privatepublic已经稍微修改:

    • open仅适用于类和类成员:它用于允许类被子类化,或者在成员被定义的模块之外重写成员。 而是public让公众可以访问该类或该成员,但不能inheritance或覆盖

    • private现在使得一个成员只能从封闭的声明中可见和可访问,而fileprivate则是包含它的整个文件

    更多细节在这里 。

    根据@Antonio,我们可以使用一个单独的属性作为readOnly属性值进行公开的readWrite和私人的readWrite 。 以下是我的例子:

     class MyClass { private(set) public var publicReadOnly: Int = 10 //as below, we can modify the value within same class which is private access func increment() { publicReadOnly += 1 } func decrement() { publicReadOnly -= 1 } } let object = MyClass() print("Initial valule: \(object.publicReadOnly)") //For below line we get the compile error saying : "Left side of mutating operator isn't mutable: 'publicReadOnly' setter is inaccessible" //object.publicReadOnly += 1 object.increment() print("After increment method call: \(object.publicReadOnly)") object.decrement() print("After decrement method call: \(object.publicReadOnly)") 

    这里是输出:

      Initial valule: 10 After increment method call: 11 After decrement method call: 10