gpt4 book ai didi

swift - Swift 中的 "required"关键字是什么意思?

转载 作者:IT王子 更新时间:2023-10-29 05:08:58 26 4
gpt4 key购买 nike

举个例子:

class A {
var num: Int

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

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

我已将Ainit 函数标记为必需。这到底是什么意思?我在子类 B 中完全省略了它,编译器根本没有提示。那怎么要求呢?

最佳答案

参见 "Automatic Initializer Inheritance" :

Rule 1 If your subclass doesn’t define any designated initializers, it automatically inherits all of its superclass designated initializers.

Rule 2 If your subclass provides an implementation of all of its superclass designated initializers—either by inheriting them as per rule 1, or by providing a custom implementation as part of its definition—then it automatically inherits all of the superclass convenience initializers.

在你的例子中,子类 B 没有自己定义任何初始化器,因此它继承 A 的所有初始化器,包括必需的初始化器。如果 B 只定义了便利初始值设定项,也是如此(现在针对 Swift 2 更新):

class B: A {

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

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

但是如果子类定义了任何指定的(= 非便利的)初始化器,那么它不再继承父类(super class)初始值设定项。特别是要求初始化器不是继承的,所以这不会编译:

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'

如果从 A 的 init 方法中删除 required,则类 C编译也是如此。

关于swift - Swift 中的 "required"关键字是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26923123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com