如何初始化子类属性“quantity”

时间:2016-03-15 11:53:14

标签: ios swift inheritance subclass superclass

我正在尝试在swift中学习继承和初始化的概念,并提出了以下代码。 “swift编程语言2.1”指出,如果子类提供其所有超类的指定初始化器的实现,则子类也会自动继承其所有超类便捷初始化器。

因此,子类“RecipeIngredient”应该继承超类“Food”的convenience init(){ self.init(name: "[unnamed]")。但是这个特殊的方便init只初始化var name,它如何初始化子类属性quantity?有人可以向我解释一下,当我使用超类quantity创建子类实例时,子类属性convenience init(){ self.init(name: "[unnamed]")是如何初始化的?在此先感谢您的帮助!

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

1 个答案:

答案 0 :(得分:1)

执行时

let ingredientOne = RecipeIngredient()

方法Food.init()运行,并调用self.init(name:String)self实际上是RecipeIngredient的一个实例,因此您提供的此方法实际上是RecipeIngredient.init(name:String)来初始化quantity

可以通过在每个print例程中添加init语句来确认这一点,以查看以哪种方式调用哪些方法。

如果我注释掉方法RecipeIngredient.init(name:String),编译器将不再让我写RecipeIngredient()