子类 属性 "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()