Sobes.tech
Middle

What is the difference between conventions and designated?

sobes.tech AI

Answer from AI

convenience initializers are secondary; they can only call other initializers from the same class, ultimately delegating to a designated initializer. They are used to add convenient ways to create instances.

designated initializers are primary; they guarantee the complete initialization of all stored properties of the class (its own and inherited). They can call designated initializers of the parent class. Each class must have at least one designated initializer.

class BaseClass {
    var baseProperty: String

    init(baseProperty: String) { // Designated initializer
        self.baseProperty = baseProperty
    }
}

class DerivedClass: BaseClass {
    var derivedProperty: Int

    init(baseProperty: String, derivedProperty: Int) { // Designated initializer
        self.derivedProperty = derivedProperty
        super.init(baseProperty: baseProperty) // Call to parent's designated initializer
    }

    convenience init(baseProperty: String) { // Convenience initializer
        self.init(baseProperty: baseProperty, derivedProperty: 0) // Delegates to its designated
    }

    convenience init() { // Convenience initializer
        self.init(baseProperty: "Default Base", derivedProperty: -1) // Delegates to its designated
    }
}