Cla*_*oft 308 syntax declaration modifier swift swift3
在ObjectiveC.swift从标准库文件包含大约228行代码下面几行:
extension NSObject : Equatable, Hashable {
/// ...
open var hashValue: Int {
return hash
}
}
Run Code Online (Sandbox Code Playgroud)
open var在这种情况下意味着什么,或者open一般来说关键字是什么?
Mar*_*n R 538
open 是Swift 3中的一个新的访问级别,随着实现而引入
它适用于2016年8月7日的Swift 3快照,以及Xcode 8 beta 6.
简而言之:
open类是可访问的,并可以子类的定义模块之外.一open类成员是可访问和
可重写的定义模块的外部.public类是可访问的,但不是子类化的定义模块之外.甲public类成员是可访问的,但
不可重写的定义模块的外部.那么open是什么public曾经在以前的版本雨燕和的访问public受到限制.或者,正如Chris Lattner在SE-0177中所说
:允许区分公共访问和公共覆盖:
"开放"现在只是"比公众更公开",提供了一个非常简单和干净的模型.
在您的示例中,open var hashValue是一个可访问的属性,可以在NSObject子类中重写.
有关更多示例和详细信息,请查看SE-0117.
阅读开放为
在其他模块中打开继承
我在其他模块中重复打开继承.因此,开放类可以在包含定义模块的其他模块中进行子类化.打开vars和函数是打开的,以覆盖其他模块.它是限制最少的访问级别.它与公共访问接受一样好,公共的东西在其他模块中被关闭以继承.
来自Apple Docs:
开放访问仅适用于类和类成员,它与公共访问不同,如下所示:
具有公共访问权限或任何更严格的访问级别的类只能在定义它们的模块中进行子类化.
具有公共访问权限或任何更具限制性的访问级别的类成员只能在定义它们的模块中被子类覆盖.
开放类可以在定义它们的模块中进行子类化,也可以在导入模块的任何模块中进行子类化.
- 开放类成员可以由定义它们的模块中的子类覆盖,也可以在导入定义它们的模块的任何模块中覆盖.
Open 是一个访问级别,引入是为了对 Swift 上的类继承施加限制。
这意味着开放访问级别只能应用于类和类成员。
在课堂上
一个开放类可以在它定义的模块和导入定义该类的模块的模块中进行子类化。
班级成员
这同样适用于班级成员。一个打开的方法可以被它定义的模块中的子类以及导入定义该方法的模块的模块中的子类覆盖。
更新的必要性
某些类库和框架并非设计为子类化,这样做可能会导致意外行为。原生 Apple 库也不允许覆盖相同的方法和类,
因此,在此添加之后,他们将相应地应用公共和私人访问级别。
有关更多详细信息,请查看Apple 访问控制文档
| 归档时间: |
|
| 查看次数: |
90362 次 |
| 最近记录: |