Domina los inicializadores en Swift con buenas prácticas de nombres, etiquetas de parámetros y manejo de opcionales. Verás cómo crear varios inicializadores en una misma estructura, cuándo omitir etiquetas con subrayado para una sintaxis más legible y qué propiedades debes inicializar siempre en una clase. Todo con ejemplos simples y directos.
¿Cómo crear y sobrecargar inicializadores en Swift?
Definir varios inicializadores permite construir un mismo tipo de diferentes formas. En una estructura de color, las componentes rojo, verde y azul se representan como valores de tipo Double. Si los parámetros de init se llaman igual que las propiedades, usa self. para asignar correctamente.
structColor{var red:Doublevar green:Doublevar blue:Doubleinit(red:Double, green:Double, blue:Double){self.red = red
self.green = green
self.blue = blue
}// Escala de grises: las tres componentes comparten el mismo valor.init(white:Double){self.red = white
self.green = white
self.blue = white
}}// Ejemplos de usolet magenta =Color(red:1, green:0, blue:3)let halfGray =Color(white:0.5)
Puedes definir múltiples inicializadores con diferentes firmas.
Cuando coinciden nombres, usa self.propiedad = parámetro.
Escala de grises: un único parámetro se propaga a las tres componentes.
Llamadas explícitas: usa etiquetas de argumento como red:, green:, blue:.
¿Por qué las etiquetas de parámetros son obligatorias en struct?
En Swift, las estructuras generan inicializadores con etiquetas externas por defecto. Al invocar, debes incluirlas; omitirlas provoca error. Es una ayuda de legibilidad y claridad.
// Error: faltan etiquetas externasauto let c =Color(1,0,1)// ❌// Correcto: con etiquetaslet c =Color(red:1, green:0, blue:1)// ✅
¿Cuándo omitir una etiqueta con subrayado en init?
Hay parámetros cuyo nombre se sobreentiende por el contexto. En un tipo Celsius, escribir la etiqueta externa "celsius" al invocar puede resultar redundante. Para lograr una lectura natural, usa el subrayado en la etiqueta externa del init.
Lectura fluida: cuando el contexto es claro, omite la etiqueta externa.
Sintaxis: declara el init con "_" como etiqueta externa.
Invocación: pasa solo el valor, sin nombre de parámetro.
¿Cómo manejar propiedades opcionales y requeridas en una clase?
Las propiedades no opcionales deben quedar inicializadas al final del init. Las opcionales pueden empezar sin valor. En una pregunta de encuesta, el texto es obligatorio, la respuesta puede ser String?. Además, si el texto no cambia, declara la propiedad como constante con let.
classSurveyQuestion{let text:Stringvar response:String?init(text:String){self.text = text
}funcask(){print(text)}}let q1 =SurveyQuestion(text:"¿Te gustan los tacos?")q1.ask()// Muestra la pregunta.q1.response ="Sí, me encantan todos ellos"// Se asigna después.
Propiedades requeridas: deben inicializarse siempre en el init.
Propiedades opcionales: pueden permanecer sin valor hasta más tarde.
Inmutabilidad útil: usa let cuando el valor no cambia.
Flujo natural: primero se formula la pregunta, luego llega la respuesta.
¿Tú cómo eliges las etiquetas de parámetros en tus inits? Comparte en comentarios tus ejemplos de inicializadores, usos de subrayado y manejo de opcionales en Swift.