swift3.0 构造器的修饰符

class ClassA{
    let numA: Int
    required init(num: Int) {
        numA = num
    }
    
    convenience init(bigNum: Bool){
        self.init(num: bigNum ? 1000 : 1)
    }
}

class ClassB: ClassA {
    let numB: Int
    required init(num: Int) {
        numB = num + 1
        super.init(num: num)
    }
}

required

强制子类对这个方法重写实现

required修饰符的使用规则:

  • required修饰符只能用于修饰类初始化方法。
  • 当子类含有异于父类的初始化方法时(初始化方法参数类型和数量异于父类),子类必须要实现父类的required初始化方法,并且也要使用required修饰符而不是override
  • 当子类没有初始化方法时,可以不用实现父类的required初始化方法。

convenience

便利构造器, convenience 的初始化方法是不能被子类重写或者是从子类中以 super 的方式被调用的, 但是子类可以调用便利构造器来进行子类初始化

你可能感兴趣的:(swift3.0 构造器的修饰符)