objective-c - Swift 只读外部,读写内部属性

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

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

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

在 Java 中,约定是:

  • 声明一个 protected 字段,并实现一个公共(public)的、只读的 getter(方法)。

Swift 的成语是什么?

最佳答案

给定一个类属性,您可以指定不同的访问级别,方法是在属性声明前加上访问修饰符,后跟括号之间的 getset。例如,具有公共(public) getter 和私有(private) setter 的类属性将声明为:

private(set) public var readonlyProperty: Int

推荐阅读:Getters and Setters

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

Swift 3 笔记

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

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

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

更多详情 here .

https://stackoverflow.com/questions/25708439/

相关文章:

iphone - CALayers 没有在其 UIView 的边界更改时调整大小。为什么?

objective-c - 如何在 Xcode 中定义预处理器符号

ios - 以编程方式检索 iPhone 上的内存使用情况

objective-c - ViewController 响应选择器 : message sent

ios - 获取当前页面

objective-c - 无法使用 nil 模型创建 NSPersistentStoreCoord

objective-c - Swift 变量是原子的吗?

objective-c - Xcode 4(和依赖项)的编译、构建或存档问题

objective-c - 按名称创建objective-c类实例?

objective-c - 如何使用 performSelector :withObject:aft