Sobes.tech
Junior — Middle

É possível chamar o método super no construtor de um inicializador de conveniência em Swift?

sobes.tech IA

Resposta da IA

Em Swift, a chamada a super.init no construtor convenience initializer não é possível diretamente. De acordo com as regras de inicialização em Swift, os inicializadores convenience devem chamar outro inicializador da mesma classe, não do superclasse.

Apenas o inicializador designado (o inicializador principal) pode chamar super.init. Assim, o inicializador convenience deve primeiro chamar o inicializador designado da sua própria classe, que por sua vez chamará super.init.

Exemplo:

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

class Child: Parent {
    override init() {
        super.init() // chamada ao super no inicializador designado
        print("Child designated init")
    }

    convenience init(param: Int) {
        self.init() // chamada ao inicializador designado da sua própria classe
        print("Child convenience init com parâmetro \(param)")
    }
}

let c = Child(param: 5)

Aqui, o convenience init chama self.init(), e self.init() chama super.init().