Sobes.tech
Middle

Qual é a diferença entre convenções e designado?

sobes.tech IA

Resposta da IA

Os inicializadores de conveniência são secundários, podem apenas chamar outros inicializadores do mesmo classe, delegando finalmente a chamada ao inicializador designado. São usados para adicionar formas convenientes de criar instâncias.

Os inicializadores designados são os principais, garantem a inicialização completa de todas as propriedades armazenadas da classe (as próprias e as da classe pai). Podem chamar inicializadores designados da classe pai. Cada classe deve ter pelo menos um inicializador designado.

class BaseClass {
    var baseProperty: String

    init(baseProperty: String) { // Inicializador designado
        self.baseProperty = baseProperty
    }
}

class DerivedClass: BaseClass {
    var derivedProperty: Int

    init(baseProperty: String, derivedProperty: Int) { // Inicializador designado
        self.derivedProperty = derivedProperty
        super.init(baseProperty: baseProperty) // Chamada ao inicializador designado do pai
    }

    convenience init(baseProperty: String) { // Inicializador de conveniência
        self.init(baseProperty: baseProperty, derivedProperty: 0) // Delegação ao seu próprio inicializador designado
    }

    convenience init() { // Inicializador de conveniência
        self.init(baseProperty: "Default Base", derivedProperty: -1) // Delegação ao seu próprio inicializador designado
    }
}