Middle
Kāda ir atšķirība starp masīva un struktūru kopēšanu Swift?
sobes.tech AI
Atbilde no AI
Swift masīvs kopē jaunu neatkarīgu visu satura kopiju. Izmaiņas sākotnējā masīvā neietekmē kopēto un otrādi.
Swift struktūras kopēšana arī rada jaunu visu tās īpašību kopiju. Ja struktūra satur iekšējos atsauces tipus (piemēram, klases), tiek kopēta saite uz šo objektu, nevis pats objekts. Izmaiņas atsauces tipā iekšā ietekmē arī sākotnējo struktūru.
struct Point {
var x: Int
var y: Int
}
// Struktūras kopēšana
var point1 = Point(x: 10, y: 20)
var point2 = point1 // Struktūras kopēšana
point2.x = 30
print(point1.x) // Izvadīs 10 (point1 nav mainījies)
class Container {
var value: Int
init(value: Int) {
self.value = value
}
}
struct HasReference {
var data: Container
}
// Struktūras kopēšana ar atsauces tipu
var ref1 = HasReference(data: Container(value: 100))
var ref2 = ref1 // Struktūras kopēšana
ref2.data.value = 200 // Izmaiņas atsauces tipā iekšā struktūrā
print(ref1.data.value) // Izvadīs 200 (izmaiņas ietekmēja)
// Masīva kopēšana (pēc vērtības)
var array1 = [1, 2, 3]
var array2 = array1 // Masīva kopēšana
array2[0] = 10
print(array1[0]) // Izvadīs 1 (izmaiņas array2 neietekmēja array1)
// Masīvs ar atsauces tipiem
var containers1 = [Container(value: 1), Container(value: 2)]
var containers2 = containers1 // Masīva kopēšana (atsauces kopējas)
containers2[0].value = 10 // Izmaiņas caur atsauci array2
print(containers1[0].value) // Izvadīs 10 (izmaiņas ietekmēja arī array1)
| Īpašība | Masīvs | Struktūra (bez atsauces īpašībām) | Struktūra (ar atsauces īpašībām) |
|---|---|---|---|
| Kopēšanas princips | Pēc vērtības (shallow copy) | Pēc vērtības | Pēc vērtības (atsauces kopējas) |
| Neatkarība kopijām | Neatkarīgas pēc satura | Neatkarīgas pēc visām īpašībām | Neatkarīgas pēc īpašību vērtībām, atkarīgas no atsauces īpašībām |
| Dziļa kopēšana | Prasa skaidru realizāciju | Dabiski | Prasa skaidru realizāciju atsauces īpašībām |