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().