小编典典

Swift 中的“open”关键字是什么?

all

标准库中的ObjectiveC.swift文件在第
228 行附近包含以下几行代码:

extension NSObject : Equatable, Hashable {
  /// ...
  open var hashValue: Int {
    return hash
  }
}

open var在这种情况下是什么意思,或者open一般来说关键字是什么?


阅读 69

收藏
2022-03-28

共1个答案

小编典典

open是 Swift 3 中的一个新的访问级别,引入了

它在 2016 年 8 月 7 日的 Swift 3 快照和 Xcode 8 beta 6 中可用。

简而言之:

  • 一个open类可以在定义模块之外 访问子类化。open类成员可以在定义模块之外 访问覆盖。
  • 一个public类在定义模块之外是 可访问 的,但 不能被子类化。public成员在定义模块之外是 可访问 的,但 不可覆盖。

以前的 Swift 版本也是如此,并且访问open受到限制。或者,正如 Chris Lattner 在 SE-0177 中所说
:允许区分公共访问和公共覆盖public``public

“涣笔”现在简直就是“公比公”,提供了一个非常简单干净的模型。

在您的示例中,open var hashValue是一个可以访问并且可以在NSObject子类中覆盖的属性。

有关更多示例和详细信息,请查看SE-0117

2022-03-28