Swift:在从初始化程序返回之前没有在所有路径上调用“super.init”?

7 inheritance ios swift

我在我的一类中的 init 的最后一个大括号中收到此错误。该类类似于以下内容(我将发生错误的位置作为市场营销):

class RecordingViewController: UIViewController, AVCaptureFileOutputRecordingDelegate {

    let cameraButton:UIButton?
    let camPreview:UIView?

    init (cameraButton: UIButton!, camPreview: UIView!) {
        self.cameraButton = cameraButton
        self.camPreview = camPreview

    } //get error here

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    //do a bunch of other stuff
}
Run Code Online (Sandbox Code Playgroud)

我已经在这里这里寻找解决方案,但两者似乎都是非常糟糕的解决方案或针对该问题过于具体的解决方案,因此它们对我不起作用。

我希望以这样一种方式解决我的问题,它可以帮助我理解为什么会发生这个错误。

Tal*_*hen 17

由于您从 UIViewController 继承,因此您应该super.initinit函数中设置变量后立即调用

当你继承一个类并实现一个新的 init 函数或覆盖它自己的 init 函数时,你应该(几乎)总是调用 super.init。让我们以您的示例为例,您继承自 UIViewController。UIViewController 有一些初始化函数,你可以用它们来初始化一个视图控制器。如果你不调用 super.init,这些函数中的所有代码都不会被调用,并且视图控制器可能不会被初始化。

无论如何,这段代码应该适合你:

class ViewController: UIViewController {

    var button: UIButton?

    init(button: UIButton) {
        self.button = button
        super.init(nibName: nil, bundle: nil)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}
Run Code Online (Sandbox Code Playgroud)