Sobes.tech
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