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

Swift中的“ required”关键字是什么意思?

滑乐逸
2023-03-14
问题内容

请看以下示例:

class A {
    var num: Int

    required init(num: Int) {
        self.num = num
    }
}

class B: A {
    func haveFun() {
        println("Woo hoo!")
    }
}

我已将Ainit功能标记为required。这到底是什么意思?我在子类中完全省略了它,B并且编译器完全没有抱怨。那么,它是如何要求的呢?


问题答案:

请参见“自动初始化继承”:

规则1 如果子类没有定义任何指定的初始化器,它将自动继承其所有超类指定的初始化器。

规则2
如果您的子类提供了其所有超类指定初始化器的实现(通过按规则1继承它们,或通过提供自定义实现作为其定义的一部分),则它会自动继承所有超类便利性初始化器。

在您的示例中,子类B没有自行定义任何初始化程序,因此它 继承了的
所有初始化程序A,包括所需的初始化程序。如果B仅定义便捷初始化程序(现在已针对 Swift 2进行了 更新),则同样如此:

class B: A {

    convenience init(str : String) {
        self.init(num: Int(str)!)
    }

    func haveFun() {
        print("Woo hoo!")
    }
}

但是,如果子类定义了任何指定的(=非便捷性)初始化器,则它不再继承超类初始化器。特别是所需的初始化器不会被继承,因此不会编译:

class C: A {

    init(str : String) {
        super.init(num: Int(str)!)
    }

    func haveFun() {
        print("Woo hoo!")
    }
}
// error: 'required' initializer 'init(num:)' must be provided by subclass of 'A'

如果您requiredA的init方法中删除from,那么类C 也会进行编译。



 类似资料:
  • 问题内容: 来自标准库的文件包含围绕228行的以下几行代码: 在这种情况下是什么意思,或者通常是什么关键字? 问题答案: 是Swift 3中的新访问级别,随实现而引入 SE-0117允许区分公共访问权限和公共替代权限 从2016年8月7日开始,Swift 3快照和Xcode 8 beta 6都可以使用它。 简而言之: 在定义模块之外, 可以访问 和 可继承 一个类。一类成员是 可访问 和 可重写

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

  • 问题内容: 在此MySQL表定义中: 什么是关键字是什么意思?它不是主键,也不是外键,所以它仅仅是索引吗?如果是这样,用这种方法创建的这种索引有何特别之处? 问题答案: 从http://dev.mysql.com/doc/refman/5.1/en/create- table.html 引用 所以是一个;)

  • 问题内容: 我看见某个地方 问题答案: Google是您的朋友- 抢手货 -您还可以先看看什么是序列化。 它将成员变量持久化为字节流时标记为不序列化。通过网络传输对象时,需要对该对象进行“序列化”。序列化将对象状态转换为串行字节。这些字节通过网络发送,并且从这些字节中重新创建对象。由java暂态关键字标记的成员变量不会被传输,它们是有意丢失的。 此处的示例,稍作修改(感谢@pgras):

  • 本文向大家介绍Java里volatile关键字是什么意思,包括了Java里volatile关键字是什么意思的使用技巧和注意事项,需要的朋友参考一下 在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。 Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机

  • 问题内容: Java 13引入了 用于表达式的关键字。 如何使用它,与默认值或值有什么区别? 问题答案: 问答环节 如何使用? 需要完整块时,带有箭头标签: }; 使用传统积木: }; 默认收益有什么区别? 一条语句将控制权返回给 方法 (第8.4节,第§15.12节)或 构造函数 (第8.8节和第15.9节) 的调用者, 而一条语句则通过 使一个封闭的表达式产生一个指定值来转移控制权。 突破值有