Qual è la differenza tra copiare un array e copiare una struttura nel linguaggio di programmazione Swift?
sobes.tech AI
Risposta dell'AI
La struttura copiata è una nuova istanza indipendente. Le modifiche a una struttura non influenzano l'altra.
La copia di un array in Swift di default è una "copia al momento della scrittura" (copy-on-write). Ciò significa che, creando un nuovo riferimento a un array, i dati non vengono duplicati finché una delle copie non viene modificata. Fino a quel momento, entrambe le variabili puntano agli stessi elementi in memoria. Quando una delle copie viene modificata, viene creata una nuova istanza indipendente dei dati.
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // Copia della struttura. p2 è una nuova istanza
p2.x = 10 // La modifica di p2 non influisce su p1
print("p1: \(p1.x), \(p1.y)") // Output: p1: 1, 2
print("p2: \(p2.x), \(p2.y)") // Output: p2: 10, 2
var array1 = [1, 2, 3]
var array2 = array1 // Copia al momento della scrittura
array2[0] = 10 // Si verifica una copia effettiva dei dati
print("array1: \(array1)") // Output: array1: [1, 2, 3]
print("array2: \(array2)") // Output: array2: [10, 2, 3]
La differenza risiede nel comportamento fondamentale: le strutture vengono sempre copiate per valore, mentre gli array, essendo strutture, implementano l'ottimizzazione "copy-on-write" per una gestione più efficiente della memoria in presenza di molteplici riferimenti.