Sobes.tech
Middle

Care este diferența dintre copierea unui array și copierea unei structuri în limbajul de programare Swift?

sobes.tech AI

Răspuns de la AI

Structura copiată este o instanță nouă independentă. Modificările într-o structură nu afectează cealaltă.

Copierea unui array (Array) în Swift se face implicit prin "copy-on-write". Aceasta înseamnă că, atunci când se creează o nouă referință la un array, datele nu sunt duplicate până când una dintre copii nu este modificată. Până atunci, ambele variabile fac referire la aceleași elemente din memorie. Când una dintre copii este modificată, se creează o nouă instanță independentă a datelor.

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

var p1 = Point(x: 1, y: 2)
var p2 = p1 // Copierea structurii. p2 este o nouă instanță

p2.x = 10 // Modificarea lui p2 nu afectează p1

print("p1: \(p1.x), \(p1.y)") // Ieșire: p1: 1, 2
print("p2: \(p2.x), \(p2.y)") // Ieșire: p2: 10, 2

var array1 = [1, 2, 3]
var array2 = array1 // Copiere la scriere

array2[0] = 10 // Se face o copiere efectivă a datelor

print("array1: \(array1)") // Ieșire: array1: [1, 2, 3]
print("array2: \(array2)") // Ieșire: array2: [10, 2, 3]

Diferența constă în comportamentul fundamental: structurile sunt întotdeauna copiate după valoare, în timp ce array-urile, fiind structuri, implementează optimizarea "copy-on-write" pentru gestionarea mai eficientă a memoriei în cazul referințelor multiple.