Swift 2.0子类化UIViewController的子类并调用便捷初始化器

dmo*_*row 2 uiviewcontroller ios swift

关于Swift 2.0/Xcode 7beta3中UIViewController的指定和便利初始化器有一点混淆.我们的UIViewControllers都是在代码中定义的,没有Nib

目前,A类继承自UIViewController

class A : UIViewController {
    convenience init() {
        ...
        self.init(nibName:nil, bundle:nil)
        ...
    }    
}
Run Code Online (Sandbox Code Playgroud)

然后B类继承自A类,并应覆盖Conven init并将其称为super.init()

class B : A {
    convenience init() {
        super.init()
        ...
    }    
}
Run Code Online (Sandbox Code Playgroud)

编译器不允许这样,必须调用超类'...'错误的指定初始值设定项super.init()

mat*_*att 11

您需要指定初始化程序,而不是convenience:

class A : UIViewController {
    init() {
        super.init(nibName:nil, bundle:nil)
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("")
    }
}

class B : A {
    override init() {
        super.init()
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("")
    }
}
Run Code Online (Sandbox Code Playgroud)

这为您提供了您正在寻找的继承结构.

  • 您可能想阅读我的书,它解释了类初始化程序的规则(尽管您几乎不需要 - 您只需要听编译器告诉您的内容):http://www.apeth.com/swiftBook/ ch04.html#_class_initializers (4认同)