一尘不染

Swift只读外部,内部读写属性

swift

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

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

  • 在接口中将该属性声明为只读,并使用类扩展名在内部访问该属性。这是基于消息的访问,因此可以很好地与KVO,原子性等配合使用。
  • 在接口中将该属性声明为只读,但在内部访问后备ivar。由于对ivar的默认访问受到保护,因此在类层次结构中效果很好,在该类层次结构中,子类也可以修改值,但该字段为只读。

在Java中,约定为:

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

Swift的成语是什么?


阅读 572

收藏
2020-07-07

共1个答案

一尘不染

给定一个类属性,您可以通过在属性声明的前面加上access修饰符,然后在括号之间getset括号之间指定不同的访问级别。例如,具有公共获取器和私有设置器的类属性将声明为:

private(set) public var readonlyProperty: Int

建议阅读:Getters和Setters

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

斯威夫特3笔记

2个新的访问修饰符,fileprivate并且open已添加到语言中,而privatepublic已稍作修改:

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

  • private现在使成员仅从封闭的声明中可见并可以访问,而fileprivate对于包含该成员的整个文件

更多细节在这里

2020-07-07