使用必需的init从super继承Swift 5

时间:2019-06-09 16:15:57

标签: swift

我正在研究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,是否没有办法在初始化期间初始化子类参数?

1 个答案:

答案 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的重点。

  

在定义类之前写所需的修饰符   初始化程序,指示该类的每个子类必须   实现该初始化程序

Source