UIView在swift中指定了初始化程序

Edw*_*ynh 5 ios swift

所以我已经UIView这样继承了

class CustomView: UIView {
}
Run Code Online (Sandbox Code Playgroud)

我可以做点什么

let customView = CustomView()
Run Code Online (Sandbox Code Playgroud)

但是,当我覆盖我认为是UIViewie 的两个指定初始化器时init(frame:),init(coder:)就像这样

class CustomView: UIView {

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.backgroundColor = UIColor.redColor()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = UIColor.redColor()
    }
}
Run Code Online (Sandbox Code Playgroud)

我不能再这样创建视图,因为它抱怨init()不再存在

let customView = CustomView()
Run Code Online (Sandbox Code Playgroud)

我的理解是,如果我覆盖所有指定的初始化器,我也应该继承所有的便利初始化器.

所以我的问题是.是init()不是UIView的便利初始化?或者UIView上有另一个指定的初始化程序,我还没有覆盖吗?

mat*_*att 6

init不是 UIView 上的便利初始化程序。init根本不是 UIView 上的初始化程序!它是其超类 NSObject 上的初始化程序 - UIView 只是继承了它。它是NSObject 上的指定初始化程序。所以当你实现一个指定的构造器时,你切断了指定构造器的继承——包括init.