天天看点

Swift便利构造函数convenience

便利构造函数: convenience

便利构造函数是对构造函数的一种功能扩充, 可以在初始化之前,根据指定的条件完成相关的初始化工作.

class AClass {
    let numA: Int
    init(num: Int) {
        numA = num
    }

    //便利构造
    //注意点:
    //便利构造函数必须调用当前类的构造函数完成初始化
    //便利构造函数不能被子类重写或者是从子类中以super的方式被调用
    convenience init(num: Int, str: String) {     
        if num > 100{
            self.init(num: 100)
        }else{
            self.init(num: num)
        }
    }
}

class BClass: AClass {
    let numB: Int
    override init(num: Int) {
        numB = num + 1
        super.init(num: num)
//        super.init(num: xxx, str: xxx)  // 子类中实现中不可调用便利构造
    }
}

let a = AClass(num: 333, str: "这是便利构造方法~")
a.numA
//print:100

//子类可以调用便利构造:
//另外要注意, 如果使用子类要能调用到父类便利构造方法, 必须重写父类除了便利构造函数的所有构造函数, 是由于在便利构造函数中会调用当前的构造函数, 如果子类没有重写, 也无法完成初始化.
let b = BClass(num: 88, str: "这也是便利构造方法")
b.numA