什么是'关键字在Swift?

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

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

在这个上下文中open var是什么意思,或者open关键字一般是什么意思?

135316 次浏览

Open是一个访问级别,引入它是为了限制Swift上的类继承。

这意味着开放访问级别只能应用于类和类成员

在类

开放类可以在定义它的模块中继承,也可以在导入定义该类的模块的模块中继承。

班级成员

这同样适用于类成员。一个开放方法可以被定义它的模块中的子类覆盖,也可以被导入定义该方法的模块的模块覆盖。

更新的需要

库和框架的某些类并没有被设计成子类,这样做可能会导致意想不到的行为。原生苹果库也不允许重写相同的方法和类,

因此,在此添加之后,他们将相应地应用公共和私有访问级别。

有关更多细节,请参阅苹果访问控制文档

打开读如下

在其他模块中为继承打开

我在其他模块中重复打开继承。 因此,开放类对包含定义模块的其他模块的子类化开放。开放的变量和函数是开放的,可以在其他模块中重写。这是限制最少的访问级别。它和公共访问一样好,除了一些公共的东西对其他模块的继承是关闭的

苹果公司的文档:

开放访问仅适用于类和类成员,它与公共访问的区别如下:

  1. 具有公共访问权限或任何更严格访问级别的类可以 只能在定义它们的模块中成为子类

  2. 具有公共访问权限或任何更严格访问级别的类成员可以 只在它们所在的模块内被子类覆盖 定义。< / p >

  3. 开放类可以在定义它们的模块中被子类化,也可以在导入该模块的模块中被子类化 他们定义。< / p >
  4. 开放类成员可以被子类覆盖 在定义它们的模块中,以及在任何模块中 导入定义它们的模块

只开放另一个模块,例如:可可荚,或单元测试,我们可以继承或覆盖

打开来玩时处理多个模块。

开放类可以在定义模块之外访问和子类化。开放类成员可以在定义模块外部访问和重写。