Middle
¿Cuál es la diferencia entre copiar un array y estructuras en Swift?
sobes.tech AI
Respuesta de la IA
La copia de un array en Swift crea una nueva copia independiente de todo el contenido. Los cambios en el array original no afectan a la copia, y viceversa.
La copia de una estructura en Swift también crea una nueva copia de todas sus propiedades. Si la estructura contiene tipos de referencia anidados (por ejemplo, clases), se copia la referencia a ese objeto, no el objeto en sí. Los cambios en el tipo de referencia dentro de la estructura copiada se reflejan en la original.
struct Point {
var x: Int
var y: Int
}
// Copiar estructura
var point1 = Point(x: 10, y: 20)
var point2 = point1 // Copiar estructura
point2.x = 30
print(point1.x) // Mostrará 10 (point1 no cambió)
class Container {
var value: Int
init(value: Int) {
self.value = value
}
}
struct HasReference {
var data: Container
}
// Copiar estructura con tipo de referencia
var ref1 = HasReference(data: Container(value: 100))
var ref2 = ref1 // Copiar estructura
ref2.data.value = 200 // Cambiar el tipo de referencia dentro de la estructura
print(ref1.data.value) // Mostrará 200 (el cambio se reflejó)
// Copiar array (por valor)
var array1 = [1, 2, 3]
var array2 = array1 // Copiar array
array2[0] = 10
print(array1[0]) // Mostrará 1 (el cambio en array2 no afectó a array1)
// Copiar array que contiene tipos de referencia
var containers1 = [Container(value: 1), Container(value: 2)]
var containers2 = containers1 // Copiar array (se copian las referencias)
containers2[0].value = 10 // Cambiar a través de la referencia en array2
print(containers1[0].value) // Mostrará 10 (el cambio se reflejó en array1)
| Característica | Array | Estructura (sin propiedades de referencia) | Estructura (con propiedades de referencia) |
|---|---|---|---|
| Principio de copia | Por valor (copia superficial) | Por valor | Por valor (las referencias se copian) |
| Independencia de copias | Independientes por contenido | Independientes por todas las propiedades | Independientes por propiedades-valor, dependientes por propiedades de referencia |
| Copia profunda | Requiere implementación explícita | De forma natural | Requiere implementación explícita para propiedades de referencia |