上一节我们一起来学习了下 swift5基本语法-初始化器,初始化器也有对应的关键词required,用required修饰指定初始化器,表明其所有子类都必须实现初始化器(通过继承或者重写实现)。
【 例:】
class Perosn {
required init() {}
init(age:Int) {}
}
class Student : Perosn {
}
如上述示例的代码:
情形 ①: Student 继承 Perosn ,所以也会自动继承父类所有的指定初始化器。也就是说如果Student没有自定义任何指定初始化器,那么将会自动继承 required init() {}
和 init(age:Int) {}
,如下所示:
01.png
情形 ② : Student 继承 Perosn ,但是Student自定义了初始化器,init(name:String) { super.init(age: 0) }
,但是会有如下图2的报错.
02.png
因为自定义了初始化器,所以就不能继承Perosn父类的初始化器,所以也需要必须重写required init() {}
方法。
正确写法如下所示:
class Perosn {
required init() {}
init(age:Int) {}
}
class Student : Perosn {
init(name:String) {
super.init(age: 0)
}
//required为必要初始化器,override关键字不必要写;
required init() {
super.init()
}
}
【 小结:】
应用场景:required应用在所有子类都必须要实现父类的某个初始化方法,如init(),需要用required修饰。