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ță |