Sobes.tech
Junior — Middle

¿Es posible llamar al método super en el constructor convenience initializer en Swift?

sobes.tech AI

Respuesta de la IA

En Swift, la llamada a super.init en el constructor convenience initializer no es posible directamente. Según las reglas de inicialización en Swift, los inicializadores convenience deben llamar a otro inicializador de la misma clase, no al inicializador de la superclase.

Solo el inicializador designado (el inicializador principal) puede llamar a super.init. Por lo tanto, el inicializador convenience debe primero llamar al inicializador designado de su propia clase, y este a su vez llamará a super.init.

Ejemplo:

class Parent {
    init() {
        print("Parent init")
    }
}

class Child: Parent {
    override init() {
        super.init() // llamada a la superclase en el inicializador designado
        print("Child designated init")
    }

    convenience init(param: Int) {
        self.init() // llamada al inicializador designado de su propia clase
        print("Child convenience init con parámetro \(param)")
    }
}

let c = Child(param: 5)

Aquí, el convenience init llama a self.init(), y self.init() llama a super.init().