如何从已经具有初始化程序的类继承时添加自定义初始值设定项?
我所拥有的是Vehicle
类,其中有一个使用参数name
的itializer。我想要做的是继承这个Vehicle
类,为新类创建另一个初始化器,但继续使用现有的初始化器。
class Vehicle{
var make:String
init(make:String){
self.make = make
}
}
// Not sure how to structure this class
class Car:Vehicle {
var engine:Double
override init(){
super.init()
}
init(engine:Double){
self.engine = engine
}
}
这就是我希望能够做到的...重新使用现有的初始化程序和新的初始化程序。
let cobalt = Car(make:"Chevy" engine: 2.5)
答案 0 :(得分:5)
子类中的任何指定初始值设定项必须从其直接超类调用指定的初始值设定项:
类类型的初始化程序委派
简化指定与便利之间的关系 初始化程序,Swift应用以下三个委托规则 初始化程序之间的调用:
规则1指定的初始化程序必须调用指定的初始化程序 来自其直接的超类
...
来自Swift Language Guide - Initialization。
因此,您可以构造指定的Car
初始值设定项,以获取两个参数make
和engine
,并使用后者启动成员属性engine
子类,然后使用提供的make
参数(提供给子类初始化程序)作为超类初始化程序的参数调用超类的指定初始值设定项。
class Car: Vehicle {
var engine: Double
init(make: String, engine:Double){
self.engine = engine
super.init(make: make)
}
}