Middle
Qual é a diferença entre copiar um array e copiar uma estrutura na linguagem de programação Swift?
sobes.tech IA
Resposta da IA
A estrutura copiada é uma nova instância independente. As alterações numa estrutura não afetam a outra.
A cópia de um array em Swift por padrão é uma "cópia na escrita" (copy-on-write). Isto significa que ao criar uma nova referência a um array, os dados não são duplicados até que uma das cópias seja modificada. Até esse momento, ambas as variáveis referenciam os mesmos elementos na memória. Quando uma das cópias é modificada, uma nova instância independente dos dados é criada.
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // Cópia da estrutura. p2 é uma nova instância
p2.x = 10 // A alteração em p2 não afeta p1
print("p1: \(p1.x), \(p1.y)") // Saída: p1: 1, 2
print("p2: \(p2.x), \(p2.y)") // Saída: p2: 10, 2
var array1 = [1, 2, 3]
var array2 = array1 // Cópia na escrita
array2[0] = 10 // A cópia real dos dados ocorre
print("array1: \(array1)") // Saída: array1: [1, 2, 3]
print("array2: \(array2)") // Saída: array2: [10, 2, 3]
A diferença reside no comportamento fundamental: estruturas são sempre copiadas por valor, enquanto arrays, sendo estruturas, implementam a otimização "copiar na escrita" para uma gestão mais eficiente da memória em múltiplas referências.