Sobes.tech
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