Sobes.tech
Middle

Qual è la differenza tra copiare un array e strutture in Swift?

sobes.tech AI

Risposta dell'AI

La copia di un array in Swift crea una nuova copia indipendente di tutto il contenuto. Le modifiche all'array originale non influenzano la copia, e viceversa.

La copia di una struttura in Swift crea anch'essa una nuova copia di tutte le sue proprietà. Se la struttura contiene tipi di riferimento annidati (ad esempio, classi), viene coperta la referenza a quell'oggetto, non l'oggetto stesso. Le modifiche al tipo di riferimento all'interno della struttura copiata si riflettono nell'originale.

struct Point {
    var x: Int
    var y: Int
}

// Copiare una struttura
var point1 = Point(x: 10, y: 20)
var point2 = point1 // Copiare la struttura
point2.x = 30
print(point1.x) // Mostrerà 10 (point1 non è cambiato)

class Container {
    var value: Int
    init(value: Int) {
        self.value = value
    }
}

struct HasReference {
    var data: Container
}

// Copiare una struttura con tipo di riferimento
var ref1 = HasReference(data: Container(value: 100))
var ref2 = ref1 // Copiare la struttura
ref2.data.value = 200 // Cambiare il tipo di riferimento all'interno della struttura
print(ref1.data.value) // Mostrerà 200 (il cambiamento si è riflesso)

// Copiare un array (per valore)
var array1 = [1, 2, 3]
var array2 = array1 // Copiare l'array
array2[0] = 10
print(array1[0]) // Mostrerà 1 (la modifica in array2 non ha influenzato array1)

// Copiare un array che contiene tipi di riferimento
var containers1 = [Container(value: 1), Container(value: 2)]
var containers2 = containers1 // Copiare l'array (le referenze vengono copiate)
containers2[0].value = 10 // Modificare tramite la referenza in array2
print(containers1[0].value) // Mostrerà 10 (la modifica si è riflessa in array1)

Caratteristica Array Struttura (senza proprietà di riferimento) Struttura (con proprietà di riferimento)
Principio di copia Per valore (copia superficiale) Per valore Per valore (le referenze vengono copiate)
Indipendenza delle copie Indipendenti per contenuto Indipendenti per tutte le proprietà Indipendenti per proprietà-valore, dipendenti per proprietà di riferimento
Copia profonda Richiede implementazione esplicita Naturalmente Richiede implementazione esplicita per proprietà di riferimento