¿Cuál es la diferencia entre los inicializadores convention y designated en Swift?
sobes.tech AI
Respuesta de la IA
-
Inicializador Designado: El inicializador principal, "básico", en la clase. Debe inicializar completamente todas las propiedades almacenadas propias de la clase, y luego llamar al inicializador designado del superclase (a través de
super.init). Cada clase debe tener al menos un inicializador designado. -
Inicializador de Conveniencia: Un inicializador auxiliar destinado a simplificar la creación de instancias de la clase en ciertos escenarios. Debe llamar a otro inicializador del mismo clase — ya sea un inicializador designado o de conveniencia. En última instancia, la cadena de llamadas de inicializadores de conveniencia debe conducir a la llamada al inicializador designado en la misma clase. Los inicializadores de conveniencia no son obligatorios.
Aquí está el esquema de delegación de inicialización:
Convenience -> Designado (en la misma clase)
Designado -> Designado (en la clase padre)
Ejemplo:
class MyClass {
var value: Int
var name: String
// Inicializador designado
init(value: Int, name: String) {
self.value = value
self.name = name
}
// Inicializador de conveniencia
convenience init(value: Int) {
self.init(value: value, name: "DefaultName") // Llama al inicializador designado en la misma clase
}
// Otro inicializador de conveniencia
convenience init(name: String) {
self.init(value: 0, name: name) // Llama al inicializador designado en la misma clase
}
}
let instance1 = MyClass(value: 10, name: "Custom")
let instance2 = MyClass(value: 5)
let instance3 = MyClass(name: "Another")
La diferencia clave radica en su papel en la cadena de inicialización y las reglas de delegación: el inicializador designado garantiza la inicialización completa de sus propiedades y delega la inicialización del padre, mientras que el de conveniencia simplifica la creación de instancias delegando a otro inicializador en la misma clase, que en última instancia llama al inicializador designado.