Swift readonly外部,readwrite内部属性

Jas*_*ues 97 properties objective-c swift

在Swift中,定义公共模式的常规方法是什么,其中属性是外部只读的,但是在拥有它的类(和子类)内部可以修改.

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

  • 在接口中将该属性声明为readonly,并使用类扩展在内部访问该属性.这是基于消息的访问,因此它可以很好地与KVO,原子性等一起使用.
  • 在接口中将属性声明为只读,但在内部访问支持ivar.由于ivar的默认访问受到保护,因此在类层次结构中可以很好地工作,其中子类也可以修改该值,但该字段是readonly.

在Java中,惯例是:

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

Swift的成语是什么?

Ant*_*nio 209

给定一个类属性,您可以通过在属性声明前添加访问修饰符后跟getset括号之间来指定不同的访问级别.例如,具有公共getter和private setter的类属性将声明为:

private(set) public var readonlyProperty: Int
Run Code Online (Sandbox Code Playgroud)

推荐阅读:Getters and Setters

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

斯威夫特3笔记

2个新访问修饰符,fileprivateopen已加入到语言,而privatepublic已略作修改:

  • open仅适用于类和类成员:它用于允许类被子类化,或者在定义它们的模块之外覆盖成员.public而是使类或成员可公开访问,但不可继承或可覆盖

  • private现在只使一个成员可以从封闭声明中fileprivate查看和访问,而对于包含它的整个文件

更多细节在这里.

  • 请注意,截至2015年1月,如果外部类不是"public",则该语法不太正确 - 它应该是"internal"或者根本不存在(默认为类是什么 - "public"或"internal") - 即`private(set)var readonlyProperty:Int` (10认同)