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 |