ObjectiveC.swift来自标准库的文件包含围绕228行的以下几行代码:extension NSObject : Equatable, Hashable { /// ... open var hashValue: Int { return hash }}open var在这种情况下是什么意思,或者open通常是什么关键字?
3 回答
至尊宝的传说
TA贡献1789条经验 获得超10个赞
open 是Swift 3中的新访问级别,随实现而引入
SE-0117允许区分公共访问权限和公共替代权限
自2016年8月7日起,Swift 3快照和Xcode 8 beta 6都可以使用它。
简而言之:
在定义模块之外,可以访问和可继承一个open类。一类成员是可访问和 可重写的定义模块的外部。open
在定义模块之外,可以访问一个public类,但不能将其子类化。甲类成员是可访问的,但 不可重写的定义模块的外部。public
那么open是什么public曾经在以前的版本雨燕和的访问public受到限制。或者,如Chris Lattner在 SE-0177中所述:允许区分公共访问权限和公共可重写性:
现在,“开放”只是“比公众更公开”,提供了一个非常简单和干净的模型。
在您的示例中,open var hashValue是一个可以访问的属性,可以在NSObject子类中覆盖它。
慕桂英3389331
TA贡献2036条经验 获得超8个赞
开放是一种访问级别,是为了对Swift的类继承施加限制而引入的。
这意味着开放访问级别只能应用于类和类成员。
在课堂上
一个开放类可以在其定义的模块中以及在导入定义该类的模块的模块中子类化。
班级成员
同样适用于班级成员。打开的方法可以在定义该模块的模块中和在导入定义该方法的模块的模块中被子类覆盖。
此更新的需要
某些类的库和框架并非设计为子类化,这样做可能会导致意外行为。Apple原生库也不允许覆盖相同的方法和类,
因此,添加之后,它们将相应地应用公共和私有访问级别。
- 3 回答
- 0 关注
- 795 浏览
添加回答
举报
0/150
提交
取消