Search code examples
swiftinitializationconvenience-methods

What is the difference between convenience init vs init in swift, explicit examples better


I am having troubles to understand the difference between both, or the purpose of the convenience init.


Solution

  • Standard init:

    Designated initializers are the primary initializers for a class. A designated initializer fully initializes all properties introduced by that class and calls an appropriate superclass initializer to continue the initialization process up the superclass chain.

    convenience init:

    Convenience initializers are secondary, supporting initializers for a class. You can define a convenience initializer to call a designated initializer from the same class as the convenience initializer with some of the designated initializer’s parameters set to default values. You can also define a convenience initializer to create an instance of that class for a specific use case or input value type.

    per the Swift Documentation

    In a nutshell, this means that you can use a convenience initializer to make calling a designated initializer faster and more "convenient". So convenience initializers require the use of self.init instead of the super.init you might see in an override of a designated initializer.

    pseudocode example:

    init(param1, param2, param3, ... , paramN) {
         // code
    }
    
    // can call this initializer and only enter one parameter,
    // set the rest as defaults
    convenience init(myParamN) {
         self.init(defaultParam1, defaultParam2, defaultParam3, ... , myParamN)
    }
    

    I use these a lot when creating custom views and such that have long initializers with mainly defaults. The docs do a better job explaining than I can, check them out!