Inicialización I en Swift: init, parámetros, convenience init y las dos fases

Un designated initializer inicializa todos los stored properties y llama al init del padre. Un convenience initializer llama a otro init del mismo tipo (con self.init) y simplifica casos de uso habituales:

class Persona {
    let nombre: String
    let edad: Int

    // Designated
    init(nombre: String, edad: Int) {
        self.nombre = nombre
        self.edad = edad
    }

    // Convenience
    convenience init(nombre: String) {
        self.init(nombre: nombre, edad: 0)
    }
}

let adulto = Persona(nombre: "Ana", edad: 30)
let bebe   = Persona(nombre: "Leo")  // edad = 0

Las dos fases de inicialización en herencia

Fase 1: cada stored property obtiene su valor. Fase 2: personalización. Esta regla impide usar self antes de que todos los stores estén inicializados:

class Animal {
    let especie: String
    init(especie: String) { self.especie = especie }
}

class Perro: Animal {
    let raza: String

    init(raza: String) {
        self.raza = raza          // fase 1: inicializar propiedad propia
        super.init(especie: "Canis lupus")  // fase 1: delegar al padre
        print("Perro (raza) listo")  // fase 2: personalización
    }
}
let d = Perro(raza: "Labrador")

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP