Sobes.tech
Middle

Care este diferența dintre copierea unui array și a structurilor în Swift?

sobes.tech AI

Răspuns de la AI

Copierea unui array în Swift creează o copie nouă și independentă a întregului conținut. Modificările în array-ul original nu afectează copia și viceversa.

Copierea unei structuri în Swift creează, de asemenea, o nouă copie a tuturor proprietăților sale. Dacă structura conține tipuri de referință încorporate (de exemplu, clase), se copiază referința către acel obiect, nu obiectul în sine. Modificările în tipul de referință din interiorul structurii copiate se reflectă în original.

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

// Copierea unei structuri
var point1 = Point(x: 10, y: 20)
var point2 = point1 // Copierea structurii
point2.x = 30
print(point1.x) // Va afișa 10 (point1 nu s-a schimbat)

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

struct HasReference {
    var data: Container
}

// Copierea unei structuri cu tip de referință
var ref1 = HasReference(data: Container(value: 100))
var ref2 = ref1 // Copierea structurii
ref2.data.value = 200 // Modificarea tipului de referință din interiorul structurii
print(ref1.data.value) // Va afișa 200 (modificarea s-a reflectat)

// Copierea unui array (după valoare)
var array1 = [1, 2, 3]
var array2 = array1 // Copierea array-ului
array2[0] = 10
print(array1[0]) // Va afișa 1 (modificarea în array2 nu a afectat array1)

// Copierea unui array care conține tipuri de referință
var containers1 = [Container(value: 1), Container(value: 2)]
var containers2 = containers1 // Copierea array-ului (referințele sunt copiate)
containers2[0].value = 10 // Modificare prin referință în array2
print(containers1[0].value) // Va afișa 10 (modificarea s-a reflectat în array1)

Caracteristică Array Structură (fără proprietăți de referință) Structură (cu proprietăți de referință)
Principiu de copiere Pe valoare (copie superficială) Pe valoare Pe valoare (referințele sunt copiate)
Independența copiilor Independenți după conținut Independenți după toate proprietățile Independenți după proprietăți-valoare, dependenți de proprietățile de referință
Copie profundă Necesită implementare explicită În mod natural Necesită implementare explicită pentru proprietățile de referință