Swift3.0 初始化
2017-02-20 本文已影响17人
王家薪
标签(空格分隔): IOS-Swift
http://www.cnblogs.com/Free-Thinker/p/4858364.html
1,在 Swift 中, 类的初始化器有两种, 分别是 Designated Initializer(指定初始化器)和 Convenience Initializer(便利初始化器)
2,如果子类没有定义任何的指定初始化器, 那么会默认继承所有来自父类的指定初始化器。
3,如果子类提供了所有父类指定初始化器的实现, 那么自动继承父类的便利初始化器
4,如果子类只实现部分父类初始化器,那么父类其他的指定初始化器和便利初始化器都不会继承。
5,子类的指定初始化器必须要调用父类合适的指定初始化器。
看下例子
//UICollectionViewCell本身和直系父类没有实现指定构造器所以它继承父类的父类( UIView )的指定构造器和便利构造器
//public init(frame: CGRect)
//public init?(coder aDecoder: NSCoder)
class BooksListCell: UICollectionViewCell {
init(abc:Int){//这里是新建一个指定构造器 不需要关键字 override
super.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
}
override init(frame:CGRect){//这里是重写制定构造器,必须调用父类的指定构造器和使用关键字 override
super.init(frame: frame)
}
convenience init(){ //这个是便利构造器,调用自身的指定构造器,必须加上 convenience 关键字
self.init(frame:CGRect(x: 0, y: 0, width: 0, height: 0))
}
//这句必须写上,否则会报错,初始化失败时调用
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}