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

标签 objective-c properties 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 .

关于objective-c - Swift 只读外部,可读写内部属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58031021/

相关文章:

objective-c - 从 UIViewController 打开 SKScene 时出现 NSInvalidArgumentException

iphone - 弱链接 C 函数

java - 在java中读取属性文件的有效方法

objective-c - 属性属性 "retain"似乎不起作用?

objective-c - 一个 nsarray 可以容纳多少个对象?

objective-c - NSImageView 根据图像大小调整大小

java - 我如何模拟类路径中属性文件的存在?

swift - AVAudioPlayerNode - 获取播放器状态?

ios - 过滤所有事件的数组并找到哪个事件仍在进行

ios - 检测 UITextField 自动建议文本替换