¿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).