Aprende a distinguir con claridad cómo se crean y copian los datos en Swift. Verás cómo usar los inicializadores por defecto en estructuras, configurar propiedades como width y height, y entender por qué estructuras y enumerados son tipos por valor: al copiar, cada instancia conserva su propio estado.
¿Cómo funcionan los inicializadores por defecto en Swift?
Los inicializadores por defecto de una estructura permiten definir los valores de sus propiedades al crear el objeto. Si la instancia se crea como constante con let, no podrás modificar sus propiedades después. Por eso, debes establecer los valores en el momento de la creación.
¿Cómo definir resoluciones VGA y HD?
En el ejemplo, se modela una resolución con propiedades width y height. Al crear VGA y HD, se pasan los valores en el inicializador.
Estructura + let: la instancia es inmutable tras crearse.
Inicializador por defecto: acepta cada variable interna como parámetro.
¿let o var al crear una estructura?
let para instancias que no cambiarán sus propiedades.
var si planeas modificar propiedades más tarde.
Si necesitas fijar valores iniciales y luego cambiar, usa var para la instancia.
¿Qué implica que estructuras y enumerados sean tipos por valor?
Cuando asignas una estructura a otra variable, se copia el valor. Cada copia es independiente: cambiar una no afecta a la otra. Lo mismo ocurre con los enumerados.
¿Qué pasa al copiar y modificar una estructura?
A partir de una constante hd, se crea una variable cinema y se modifica solo su width. hd permanece intacta.
let hd =Resolution(width:1920, height:1080)var cinema = hd // copia por valorprint(cinema.width, cinema.height)// 1920 1080cinema.width =2048// modificamos la copiaprint(cinema.width, cinema.height)// 2048 1080print(hd.width, hd.height)// 1920 1080 (no cambia)
Copia por valor: cada instancia guarda sus propios datos.
Independencia: modificar cinema no altera hd.
¿Cómo se comporta un enumerado como CompassPoint?
Los enumerados también son tipos por valor. Copiar un valor y modificar el original no cambia la copia.
enumCompassPoint{case north, south, east, west
}var currentDirection:CompassPoint=.north
let oldDirection = currentDirection // copia por valorcurrentDirection =.south
print(currentDirection)// southprint(oldDirection)// north
Incluso si oldDirection fuera variable, seguiría conservando el valor copiado en el momento de la asignación.
var oldDirection2 = currentDirection // copia actual (south)currentDirection =.west
print(currentDirection)// westprint(oldDirection2)// south
Enumerados: se asignan y se copian por valor.
No hay referencias compartidas: cada variable mantiene su propio estado.
¿Qué palabras clave y conceptos debes recordar?
Comprender estos términos te ayudará a escribir código más claro y predecible.
Inicializador por defecto: crea instancias pasando valores para cada propiedad variable de la estructura.
Estructura (struct): tipo por valor. Las copias son independientes.
Constante (let) vs variable (var): con let, la instancia no permite cambios en sus propiedades. Con var, sí.
Propiedades width y height: ejemplo práctico para fijar valores iniciales como 640×480 (VGA) o 1920×1080 (HD).
Enumerado (enum): tipo por valor, como CompassPoint con north, south, east, west.
Copia por valor: al asignar, se duplican los datos, no la referencia.
Clases: se mencionan como diferentes en su comportamiento, tema a tratar aparte.
¿Te quedó alguna duda sobre inicializadores o copias por valor? Cuéntame en los comentarios qué caso te gustaría ver con más detalle.