我正在研究Swift学徒第三版。
这本书很快跳过了所需的初始化程序。
如果我有一个超级班级:
class Animal {
let animalType: String
required init(animalType: String) {
self.animalType = animalType
}
convenience init(animal: Animal) {
self.init(animalType: animal.animalType)
}
}
,然后子类为:
class WildAnimal: Animal {
let name: String
required init(animalType: String) {
name = ""
super.init(animalType: animalType)
}
}
我可以初始化子类的唯一方法是在所需的init中分配占位符值。即我必须输入name =“”。
如果父类具有必需的init,是否没有办法在初始化期间初始化子类参数?
答案 0 :(得分:1)
您可以有多个初始化器。您只需要“重写”所需的父初始化器即可。
class WildAnimal: Animal {
var name: String
required init(animalType: String) {
name = ""
super.init(animalType: animalType)
}
init(animalType: String, name: String) {
self.name = name
super.init(animalType: animalType)
}
}
强迫子类定义de required
的初始化方法是required
的重点。
在定义类之前写所需的修饰符 初始化程序,指示该类的每个子类必须 实现该初始化程序