Estructuras y Clases en Swift


Entendiendo Estructuras y Clases en Swift

La programación siempre me ha parecido un universo fascinante: una mezcla de lógica, creatividad y ese pequeño desafío que, cuando lo superas, te deja una sonrisa de satisfacción. Trabajo principalmente en macOS, soy fan de la terminal.app y disfruto escribiendo scripts en BASH y aprendiendo Swift, el lenguaje moderno de Apple.

Pero, como cualquier lenguaje, Swift tiene conceptos que al principio pueden generar más de una duda. Uno de los más importantes y, a la vez, confusos, es entender las diferencias entre Estructuras (Structs) y Clases (Classes).

Una metáfora para memorizarlo

Te propongo una forma sencilla (mejorable) para recordar las diferencias:

  • Las estructuras son como iglesias de barrio. Cada iglesia tiene su propia comunidad y espacio. Si una cambia, las demás no se ven afectadas.

  • Las clases son como una oligarquía poderosa. Pueden tener muchas caras (referencias), pero todas apuntan al mismo núcleo central. Si algo cambia en el poder, todos lo reflejan.

La clave está en cómo manejan el almacenamiento y la transferencia de datos

Estructuras

  • Son tipos por valor.**
  • Cada vez que las pasas a una función o las asignas a otra variable, se crea una copia independiente.
  • Si modificas la copia, el valor original no cambia.

Ejemplo:

struct PersonaStruct {
    var nombre: String
}

var persona1 = PersonaStruct(nombre: "Ana")
var persona2 = persona1
persona2.nombre = "Luis"

print(persona1.nombre) // Salida: "Ana"
print(persona2.nombre) // Salida: "Luis"

Aquí, cada “iglesia” mantiene su independencia. El cambio en una no afecta a la otra.

Clases

  • Son tipos por referencia.
  • Cuando asignas una clase a otra variable, ambas comparten una referencia al mismo objeto en memoria.
  • Si modificas una, todas las referencias lo reflejan.

Ejemplo:

class PersonaClass {
    var nombre: String
    
    init(nombre: String) {
        self.nombre = nombre
    }
}

var persona3 = PersonaClass(nombre: "Carlos")
var persona4 = persona3
persona4.nombre = "Sofía"

print(persona3.nombre) // Salida: "Sofía"
print(persona4.nombre) // Salida: "Sofía"

Aquí, la “oligarquía” muestra su poder: cambiar una referencia afecta a todas.

Resumen práctico

  • Característica Structs Classes
  • Tipo Por valor Por referencia
  • Al asignar a otra var Crea una copia Comparte referencia
  • Modificaciones No afectan al original Afectan al original

Dominar las diferencias entre estructuras y clases es clave para entender cómo Swift maneja la memoria y cuándo usar cada una.

Estructuras: Piensa en iglesias independientes (copias aisladas). Clases: Imagina una oligarquía (todos conectados al mismo centro).

La mejor manera de aprender es practicar, así que te animo a escribir tus propias estructuras y clases.