子类 属性 "quantity" 是如何初始化的
how is the subclass property "quantity" initialised
我试图在 swift 中学习继承和初始化的概念,并想出了以下代码。 "the swift programming language 2.1" 指出,如果一个子类提供了其超类的所有指定初始化器的实现,则该子类也会自动继承其超类的所有便利初始化器。
因此子类“RecipeIngredient
”应该继承超类“Food
”的convenience init(){ self.init(name: "[unnamed]")
。但是这个特别方便的init只初始化了varname
,怎么初始化子类属性quantity
呢?有人可以向我解释一下,当我使用超类 convenience init(){ self.init(name: "[unnamed]")
创建子类实例时,子类 属性 quantity
是如何初始化的?在此先感谢您的帮助!
class Food {
var name: String
init(name: String){
self.name = name
}
convenience init() {
self.init(name: "[unnamed]")
}
}
class RecipeIngredient: Food{
var quantity: Int
init(name: String, quantity: Int){
self.quantity = quantity
super.init(name: name)
}
override convenience init(name: String){
self.init(name: name, quantity: 1)
}
}
let ingredientOne = RecipeIngredient()
ingredientOne.name
ingredientOne.quantity
当你执行
let ingredientOne = RecipeIngredient()
方法 Food.init()
运行,并调用 self.init(name:String)
。 self
实际上是 RecipeIngredient
的一个实例,所以这个方法实际上是 RecipeIngredient.init(name:String)
你提供的用来初始化 quantity
的方法。
可以通过在每个 init
例程中放置一个 print
语句来确认这一点,以查看以何种顺序调用了哪些方法。
如果我注释掉方法RecipeIngredient.init(name:String)
,编译器将不再让我写RecipeIngredient()
。
我试图在 swift 中学习继承和初始化的概念,并想出了以下代码。 "the swift programming language 2.1" 指出,如果一个子类提供了其超类的所有指定初始化器的实现,则该子类也会自动继承其超类的所有便利初始化器。
因此子类“RecipeIngredient
”应该继承超类“Food
”的convenience init(){ self.init(name: "[unnamed]")
。但是这个特别方便的init只初始化了varname
,怎么初始化子类属性quantity
呢?有人可以向我解释一下,当我使用超类 convenience init(){ self.init(name: "[unnamed]")
创建子类实例时,子类 属性 quantity
是如何初始化的?在此先感谢您的帮助!
class Food {
var name: String
init(name: String){
self.name = name
}
convenience init() {
self.init(name: "[unnamed]")
}
}
class RecipeIngredient: Food{
var quantity: Int
init(name: String, quantity: Int){
self.quantity = quantity
super.init(name: name)
}
override convenience init(name: String){
self.init(name: name, quantity: 1)
}
}
let ingredientOne = RecipeIngredient()
ingredientOne.name
ingredientOne.quantity
当你执行
let ingredientOne = RecipeIngredient()
方法 Food.init()
运行,并调用 self.init(name:String)
。 self
实际上是 RecipeIngredient
的一个实例,所以这个方法实际上是 RecipeIngredient.init(name:String)
你提供的用来初始化 quantity
的方法。
可以通过在每个 init
例程中放置一个 print
语句来确认这一点,以查看以何种顺序调用了哪些方法。
如果我注释掉方法RecipeIngredient.init(name:String)
,编译器将不再让我写RecipeIngredient()
。