美文网首页
Designated 指定的, Covenience 便利的,

Designated 指定的, Covenience 便利的,

作者: fordring2008 | 来源:发表于2017-02-04 09:26 被阅读12次

Swift 是类型安全的语言,有超级严格的初始化方法

不加修饰的 init 方法都需要在方法中保证所有非 Optional 的实例变量被初始化,而在子类中也强制(显式货隐式的)调用了 super 的 designated 指定的初始化。

// 这里非 Optional 的变量在外面有自己的默认值的时候,初始化方法可以不用给他们初始化

// 不加修饰的初始化方法 init 默认是 designated 指定的

与 designated 初始化方法对应的是在 init 前面加上 convenience 关键字的初始化方法

是 swift 初始化方法的 ‘二等公民’, 只作为补充和提供使用上的方便

注意: 所有的 convenience 初始化方法都必须调用同一个类中的 designated 初始化方法来完成设置。

另外,convenience 初始化方法是不能被子类重写或者从子类中以 super 的方式被调用的

class ClassA {

let numA:Int

//如果这里加上了required关键字,表明子类必须也要加上required,但是去掉

override init(num:Int) {

numA= num

}

convenience init(bigNumber:Bool){

self.init(num: bigNumber ?10000:1)

}

}

class ClassB :ClassA{

let numB:Int

override init(num:Int){//重写了父类的的designated初始化方法

numB= num +1

super.init(num: num)

}

}

let anObj =ClassB(bigNumber:true)//这里调用的是父类的convenience初始化方法

print(anObj.numA)//

print(anObj.numB)//父类中的初始化方法被重

相关文章

网友评论

      本文标题:Designated 指定的, Covenience 便利的,

      本文链接:https://www.haomeiwen.com/subject/kvsjittx.html