为了账号安全,请及时绑定邮箱和手机立即绑定

Swift中的'open'关键字是什么?

Swift中的'open'关键字是什么?

幕布斯6054654 2019-12-13 09:44:12
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子类中覆盖它。


查看完整回答
反对 回复 2019-12-13
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

开放是一种访问级别,是为了对Swift的类继承施加限制而引入的。


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


在课堂上


一个开放类可以在其定义的模块中以及在导入定义该类的模块的模块中子类化。


班级成员


同样适用于班级成员。打开的方法可以在定义该模块的模块中和在导入定义该方法的模块的模块中被子类覆盖。


此更新的需要


某些类的库和框架并非设计为子类化,这样做可能会导致意外行为。Apple原生库也不允许覆盖相同的方法和类,


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


查看完整回答
反对 回复 2019-12-13
  • 3 回答
  • 0 关注
  • 733 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信