Swift初始化规则混乱

时间:2017-03-04 05:43:56

标签: swift initialization

规则1

如果您的子类没有定义任何指定的初始值设定项,它会自动继承其所有超类指定的初始值设定项。

混淆:我在子类中提供了一个指定的初始值设定项。这意味着没有超类指定的初始化器将归结为子类。但是我仍然需要编写 override 关键字来提供子类中任何超类指定初始值设定项的实现(这意味着超类指定init归结为子类)。规则1说如果我提供了子类指定的初始化程序,那么指定的超级类就会失败。 (如果我们没有为子类提供任何指定的init,则覆盖才有意义。)

class Food{
    var name : String
    init(foodName :String) {
        self.name = foodName
    }
}

class RecipieIngredient : Food{
    var quantity : Int
    init(fName :String, quantity :Int) {
        self.quantity = quantity
        super.init(foodName: fName)
    }

    override convenience init (foodName :String){
        self.init(fName: foodName, quantity: 1)
    }
}

1 个答案:

答案 0 :(得分:-2)

因为init()不是受保护的方法。因此,如果在子类中定义init()方法,编译器不会知道您是指超类的init()方法还是子类。 '倍率'清除它。