Swift3.0 初始化

标签(空格分隔): 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")
    }
}

你可能感兴趣的:(Swift3.0 初始化)