当前位置: 首页 > 面试题库 >

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

景鸿才
2023-03-14
问题内容

ObjectiveC.swift来自标准库的文件包含围绕228行的以下几行代码:

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

open var在这种情况下是什么意思,或者open通常是什么关键字?


问题答案:

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子类中覆盖它。

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



 类似资料:
  • 问题内容: 新的SwiftUI教程具有以下代码: 第二行单词和在其网站上被高亮显示,就像它是一个关键字一样。 Swift 5.1似乎没有作为关键字,而且我也看不出该词还有什么其他用处,因为它通常位于类型所在的位置。是否有Swift的未发布新版本?以某种我不知道的方式在类型上使用的函数吗? 关键字有什么作用? 问题答案: 是SE-0244引入的不透明结果类型,在带有Xcode 11的Swift 5.

  • 问题内容: 请看以下示例: 我已将的功能标记为。这到底是什么意思?我在子类中完全省略了它,并且编译器完全没有抱怨。那么,它是如何要求的呢? 问题答案: 请参见“自动初始化继承”: 规则1 如果子类没有定义任何指定的初始化器,它将自动继承其所有超类指定的初始化器。 规则2 如果您的子类提供了其所有超类指定初始化器的实现(通过按规则1继承它们,或通过提供自定义实现作为其定义的一部分),则它会自动继承所

  • 新的SwiftUI教程包含以下代码: 第二行是单词,在他们的网站上突出显示,就好像它是一个关键字一样。 Swift 5.1似乎没有将作为关键字,我看不出单词还能在那里做什么,因为它去了类型通常去的地方。斯威夫特有没有新的、未宣布的版本?这是一个函数,正在使用的类型,以我不知道的方式? 关键字的作用是什么?

  • 问题内容: 在JavaScript中的关键字可能会相当混乱首次遇到它的时候,人们往往会认为JavaScript是不是面向对象的编程语言。 它是什么? 它解决什么问题? 什么时候合适,什么时候不合适? 问题答案: 它做五件事: 它创建一个新对象。这个对象的类型就是 object 。 它将这个新对象的内部不可访问的 [[prototype]] (即 proto )属性设置为构造函数的外部可访问 原型

  • Swift 2 引入了 关键字,该关键字可用于确保各种数据已配置就绪。我在这个网站上看到的一个例子演示了一个提交已开发的功能: 我想知道使用< code>guard与使用< code>if条件的老式方法有什么不同。它能给你带来用简单的支票无法得到的好处吗?

  • 问题内容: Java中的原生关键字是什么? 问题答案: 述关键字被应用于方法,以指示该方法是在本机代码使用JNI(Java本地接口)来实现。