如何在Swift中为子类重写初始化器

时间:2018-07-05 18:38:40

标签: swift

假设我有一个内含默认init()的类。

class Car { 
    var tires: Int
    var doors: Int
    init (tires: Int, doors: Int){
        self.tires = tires
        self.doors = doors 
    }
}

然后我要创建一个子类-例如宝马。 BMW子类将具有其自己的发动机容积唯一变量。

class BMW: Car {
    var volume: Int
    -------- type code here---------
}

我想使用父类的 init(),然后将 volume 变量添加到该 init()中,以便当我创建宝马子类的实例,代码如下:

var newCar = BMW(tires: Int, doors: Int, volume: Int)

注意*:我不想对子类本身中的任何值进行硬编码(使用super.init()),我想创建一个全新的初始化程序。

有可能吗?如果是,您能帮我吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

首先初始化子类的volume属性,然后调用super类的指定初始化程序

class BMW: Car {
    var volume: Int

    init(tires: Int, doors: Int, volume: Int) {
        self.volume = volume
        super.init(tires: tires, doors: doors)
    }
}

请阅读Swift Language Guide: InitializationInheritance

答案 1 :(得分:0)

您可以只添加一个新的初始化程序。理想情况下,这应该使用super.init(tires:doors:)调用您为Car类创建的初始化程序。

init(tires: Int, doors: Int, volume: Int) {
    self.volume = volume
    super.init(tires: tires, doors: doors)
}