便利构造函数: 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
网友评论