Sobes.tech
Junior

¿Cómo se accede a los objetos de clase y a los objetos de estructura en Swift?

sobes.tech AI

Respuesta de la IA

A los objetos de clase, por referencia; a los objetos de estructura, por valor.

Clases (tipo de referencia):

Al asignar una instancia de clase a una variable o constante, se asigna una referencia a esa misma instancia. Los cambios realizados a través de una referencia se reflejarán en todas las referencias que apunten a esa instancia.

class MiClase {
    var valor: Int = 0
}

let objeto1 = MiClase() // Creación de la instancia
let objeto2 = objeto1   // objeto2 ahora apunta a la misma instancia
objeto1.valor = 10      // Modificamos a través de objeto1
print(objeto2.valor)    // Mostrará 10 - el cambio es visible a través de objeto2

Estructuras (tipo por valor):

Al asignar una instancia de estructura a una variable o constante, se crea una copia de esa instancia. Cada variable/constante contiene su propia copia independiente de los datos. Los cambios en una copia no afectan a las otras.

struct MiEstructura {
    var valor: Int = 0
}

var estructura1 = MiEstructura() // Creación de la instancia
var estructura2 = estructura1   // Se crea una copia de estructura1
estructura1.valor = 20          // Modificamos a través de estructura1
print(estructura2.valor)        // Mostrará 0 - estructura2 permanece sin cambios

Comparación:

Característica Clases Estructuras
Tipo Referencia Valor
Asignación Se copia la referencia Se copia el valor
Cambios Son visibles en todas las referencias Solo afectan a la copia
Herencia Es soportada No soportada
Identidad Se puede comprobar (triple equals ===) No existe concepto de identidad

La elección entre clase y estructura depende de los requisitos. Las estructuras se usan a menudo para tipos de datos pequeños y sencillos que representan un valor (por ejemplo, Point, Size, Range). Las clases se usan para tipos de datos más complejos que requieren semántica de referencia, herencia o gestión del ciclo de vida del objeto (por ejemplo, UIViewController, UIView).