Swift: 'super.init' isn't called on all paths before returning from initializer?

后端 未结 2 966
小蘑菇
小蘑菇 2021-01-18 21:06

I am getting this error on the last brace of a init in a class of mine. The class looks something like the following (I market the spot where error happens):



        
相关标签:
2条回答
  • 2021-01-18 21:41

    Since you inherit from UIViewController, you should call super.init right after you set the variables in your init function

    When you inherit a class and implement a new init function or override its own init function you should (almost) always call super.init. Let's take your example, you inherited from UIViewController. UIViewController has a few init functions that you can use to initialize a view controller. if you don't call super.init, all the code inside those functions will not get called and possibly the view controller won't get initialized.

    Anyway, this piece of code should work for you:

    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")
        }
    
    }
    
    0 讨论(0)
  • 2021-01-18 21:57

    Here is what I found on Swift Programming Language:

    In the first phase, each stored property is assigned an initial value by the class that introduced it. Once the initial state for every stored property has been determined, the second phase begins, and each class is given the opportunity to customize its stored properties further before the new instance is considered ready for use.

    A designated initializer must ensure that all of the properties introduced by its class are initialized before it delegates up to a superclass initializer.

    Hope this can explain that question.

    0 讨论(0)
提交回复
热议问题