Sobes.tech
Middle

Wat is het verschil tussen het kopiëren van een array en structuren in Swift?

sobes.tech AI

Antwoord van AI

Het kopiëren van een array in Swift maakt een nieuwe, onafhankelijke kopie van de hele inhoud. Wijzigingen in de originele array beïnvloeden de kopie niet, en vice versa.

Het kopiëren van een structuur in Swift creëert ook een nieuwe kopie van al zijn eigenschappen. Als de structuur geneste referentietypes bevat (bijvoorbeeld klassen), wordt de referentie naar dat object gekopieerd, niet het object zelf. Wijzigingen in het referentietype binnen de gekopieerde structuur worden weerspiegeld in de originele.

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

// Structuur kopiëren
var point1 = Point(x: 10, y: 20)
var point2 = point1 // Structuur kopiëren
point2.x = 30
print(point1.x) // Toont 10 (point1 is niet veranderd)

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

struct HasReference {
    var data: Container
}

// Structuur kopiëren met referentietype
var ref1 = HasReference(data: Container(value: 100))
var ref2 = ref1 // Structuur kopiëren
ref2.data.value = 200 // Wijzigen van het referentietype binnen de structuur
print(ref1.data.value) // Toont 200 (wijziging werd weerspiegeld)

// Array kopiëren (op waarde)
var array1 = [1, 2, 3]
var array2 = array1 // Array kopiëren
array2[0] = 10
print(array1[0]) // Toont 1 (wijziging in array2 beïnvloedt array1 niet)

// Array kopiëren met referentietypes
var containers1 = [Container(value: 1), Container(value: 2)]
var containers2 = containers1 // Array kopiëren (referenties worden gekopieerd)
containers2[0].value = 10 // Wijzigen via referentie in array2
print(containers1[0].value) // Toont 10 (wijziging werd weerspiegeld in array1)

Eigenschap Array Structuur (zonder referentie-eigenschappen) Structuur (met referentie-eigenschappen)
Kopieerprincipe Op waarde (shallow copy) Op waarde Op waarde (referenties worden gekopieerd)
Onafhankelijkheid van kopieën Afhankelijk van inhoud Afhankelijk van alle eigenschappen Afhankelijk van waarde-eigenschappen, afhankelijk van referentie-eigenschappen
Diepe kopie Vereist expliciete implementatie Natuurlijke wijze Vereist expliciete implementatie voor referentie-eigenschappen