Middle
Qual é a diferença entre copiar um array e estruturas em Swift?
sobes.tech IA
Resposta da IA
A cópia de um array em Swift cria uma nova cópia independente de todo o conteúdo. As alterações no array original não afetam a cópia, e vice-versa.
A cópia de uma estrutura em Swift também cria uma nova cópia de todas as suas propriedades. Se a estrutura contiver tipos de referência aninhados (por exemplo, classes), a referência a esse objeto é copiada, não o objeto em si. As alterações no tipo de referência dentro da estrutura copiada refletem-se na original.
struct Point {
var x: Int
var y: Int
}
// Copiar estrutura
var point1 = Point(x: 10, y: 20)
var point2 = point1 // Copiar estrutura
point2.x = 30
print(point1.x) // Vai mostrar 10 (point1 não mudou)
class Container {
var value: Int
init(value: Int) {
self.value = value
}
}
struct HasReference {
var data: Container
}
// Copiar estrutura com tipo de referência
var ref1 = HasReference(data: Container(value: 100))
var ref2 = ref1 // Copiar estrutura
ref2.data.value = 200 // Alterar o tipo de referência dentro da estrutura
print(ref1.data.value) // Vai mostrar 200 (a alteração foi refletida)
// Copiar array (por valor)
var array1 = [1, 2, 3]
var array2 = array1 // Copiar array
array2[0] = 10
print(array1[0]) // Vai mostrar 1 (a alteração em array2 não afetou array1)
// Copiar array que contém tipos de referência
var containers1 = [Container(value: 1), Container(value: 2)]
var containers2 = containers1 // Copiar array (as referências são copiadas)
containers2[0].value = 10 // Alterar através da referência em array2
print(containers1[0].value) // Vai mostrar 10 (a alteração refletiu-se em array1)
| Característica | Array | Estrutura (sem propriedades de referência) | Estrutura (com propriedades de referência) |
|---|---|---|---|
| Princípio de cópia | Por valor (cópia superficial) | Por valor | Por valor (as referências são copiadas) |
| Independência das cópias | Independentes pelo conteúdo | Independentes por todas as propriedades | Independentes por propriedades-valor, dependentes por propriedades de referência |
| Cópia profunda | Requer implementação explícita | Naturalmente | Requer implementação explícita para propriedades de referência |