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

请看以下示例:

class A {

var num: Int

required init(num: Int) {

self.num = num

}

}

class B: A {

func haveFun() {

println("Woo hoo!")

}

}

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

回答:

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

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

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

在您的示例中,子类B没有自行定义任何初始化程序,因此它 继承了的

所有初始化程序A,包括所需的初始化程序。如果B仅定义便捷初始化程序(现在已针对 更新),则同样如此:

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 也会进行编译。

以上是 Swift中的“ required”关键字是什么意思? 的全部内容, 来源链接: utcz.com/qa/415506.html

回到顶部