Inicializadores en Sweet: Creación y Uso Efectivo de Constructores
Clase 18 de 27 • Curso de Programación Orientada a Objetos en Swift
Contenido del curso
Tipos de Propiedades
- 5

Propiedades Almacenadas en Swift: Uso y Ejemplos Prácticos
04:48 min - 6

Propiedades Lazy en Programación: Uso y Ventajas
07:16 min - 7

Propiedades Computadas en Swift: Uso y Ejemplos Prácticos
10:30 min - 8

Computed properties de solo lectura en Swift
05:14 min - 9

Observers en Swift: willSet y didSet
07:18 min - 10

Variables estáticas en clases, estructuras y enumerados
09:19 min
Métodos, subíndices y herencia
- 11

Métodos de instancia en Swift con self
07:35 min - 12

Métodos Mutantes en Estructuras y Enumerados en Swift
09:05 min - 13

Métodos de clase en Swift: static vs class
10:50 min - 14

Subíndices en Swift: Sintaxis y Aplicaciones Prácticas
09:01 min - 15

Manipulación de Matrices y Subíndices en Programación
12:27 min - 16

Herencia de Clases en Programación Orientada a Objetos
10:14 min - 17

Sobrescritura de Métodos y Propiedades en Clases Derivadas
12:11 min
Inicializadores o constructores
- 18

Inicializadores en Sweet: Creación y Uso Efectivo de Constructores
Viendo ahora - 19

Modificación de Constructores y Parámetros Opcionales en Swift
10:10 min - 20

Constructores Designados y de Conveniencia en Herencia de Clases
09:37 min - 21

Constructores y manejo de inicialización opcional en Swift
08:42 min - 22

Destructores en Programación: Liberación de Recursos Automática
07:12 min
Encadenamiento opcional
Conclusión
Una base sólida en Swift empieza entendiendo cómo se crean objetos de forma segura. Aquí verás, con ejemplos claros, cómo un inicializador asigna valores a las propiedades desde el primer instante, por qué init es un método especial y cómo convertir entre Fahrenheit, Celsius y Kelvin sin sorpresas. Ideal para practicar en un Playground.
¿Qué es un inicializador en Swift y para qué sirve?
Un inicializador es el punto de arranque de cualquier clase o estructura. En Swift se invoca con init y su misión es dar valores iniciales a las propiedades. Si una propiedad no tiene valor por defecto, el inicializador garantiza que el objeto nace en un estado válido.
- En otros lenguajes se habla de “constructor”. En Swift, se usa el término inicializador porque la palabra clave es init.
- Durante la creación del objeto, init puede acceder a las variables y modificarlas para establecer el estado inicial.
¿Por qué se llama inicializador y no constructor?
Porque en Swift se invoca con init y, por convención, se le llama inicializador. La idea es la misma: preparar el objeto con valores consistentes.
¿Qué hace durante la creación del objeto?
- Asigna valores a cada propiedad necesaria.
- Usa self para dejar claro que se modifica la propiedad de la instancia.
- Puede tener varias variantes según los datos de entrada.
¿Cómo se implementa init con ejemplos en Fahrenheit y Celsius?
Verlo en código ayuda a fijar los conceptos. Primero, una estructura con una propiedad sin valor por defecto y un init que lo resuelve. Después, una estructura con múltiples inicializadores que convierten desde diferentes escalas.
¿Cómo dar un valor por defecto con init en Fahrenheit?
Problema: si creas una instancia sin valor inicial, la propiedad queda indeterminada. Solución: establecer un valor estándar dentro de init usando self.
struct Fahrenheit { var temperature: Double init() { self.temperature = 32 } } var f1 = Fahrenheit() // f1.temperature == 32
- Alternativa equivalente: asignar el valor por defecto directamente en la propiedad.
struct Fahrenheit { var temperature: Double = 32 }
- Punto clave: self asegura que modificas la propiedad de la instancia, no una variable local.
¿Cómo crear varios inicializadores en Celsius desde Fahrenheit y Kelvin?
Cuando una misma estructura puede nacer de datos distintos, conviene definir varios inicializadores. Aquí, dos formulas de conversión precisas:
- De Fahrenheit a Celsius: (F − 32) / 1.8.
- De Kelvin a Celsius: K − 273.15.
struct Celsius { var temperature: Double init(fromFahrenheit fahrenheit: Double) { self.temperature = (fahrenheit - 32) / 1.8 } init(fromKelvin kelvin: Double) { self.temperature = kelvin - 273.15 } } let boilingPointOfWater = Celsius(fromFahrenheit: 212) // 100.0 °C let freezingPointOfWater = Celsius(fromKelvin: 273.15) // 0.0 °C
- Los 32 °F equivalen a 0 °C con la fórmula anterior.
- 273.15 K equivalen a 0 °C con la segunda fórmula.
- Definir varios init permite inicializar según el origen del dato, manteniendo la propiedad en un estado coherente.
¿Qué considerar sobre múltiples inicializadores y herencia?
A medida que los modelos crecen, surgen preguntas relevantes sobre el diseño con inicializadores y clases:
- Un inicializador es responsable de dejar todas las propiedades con valores válidos.
- Es habitual tener varios init cuando hay distintos orígenes de datos.
- En herencia: ¿una clase hija hereda los inicializadores? ¿Se pueden sobreescribir o modificar? Estas preguntas se abren para profundizar más adelante.
¿Tienes dudas sobre qué variante de init usar o cómo estructurar las conversiones? Comparte tu caso y lo revisamos juntos.