Sobes.tech
Middle

Was ist der Unterschied zwischen dem Kopieren eines Arrays und Strukturen in Swift?

sobes.tech KI

Antwort von AI

Das Kopieren eines Arrays in Swift erstellt eine neue unabhängige Kopie des gesamten Inhalts. Änderungen am ursprünglichen Array beeinflussen die Kopie nicht, und umgekehrt.

Das Kopieren einer Struktur in Swift erstellt ebenfalls eine neue Kopie aller ihrer Eigenschaften. Wenn die Struktur verschachtelte Referenztypen (z.B. Klassen) enthält, wird die Referenz auf dieses Objekt kopiert, nicht das Objekt selbst. Änderungen am Referenztyp innerhalb der kopierten Struktur spiegeln sich in der Originalstruktur wider.

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

// Kopieren der Struktur
var point1 = Point(x: 10, y: 20)
var point2 = point1 // Kopieren der Struktur
point2.x = 30
print(point1.x) // Gibt 10 aus (point1 hat sich nicht geändert)

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

struct HasReference {
    var data: Container
}

// Kopieren der Struktur mit Referenztyp
var ref1 = HasReference(data: Container(value: 100))
var ref2 = ref1 // Kopieren der Struktur
ref2.data.value = 200 // Ändern des Referenztyps innerhalb der Struktur
print(ref1.data.value) // Gibt 200 aus (Änderung wurde reflektiert)

// Kopieren eines Arrays (nach Wert)
var array1 = [1, 2, 3]
var array2 = array1 // Kopieren des Arrays
array2[0] = 10
print(array1[0]) // Gibt 1 aus (Änderung in array2 hat array1 nicht beeinflusst)

// Kopieren eines Arrays mit Referenztypen
var containers1 = [Container(value: 1), Container(value: 2)]
var containers2 = containers1 // Kopieren des Arrays (Referenzen werden kopiert)
containers2[0].value = 10 // Ändern über die Referenz in array2
print(containers1[0].value) // Gibt 10 aus (Änderung wurde in array1 reflektiert)

Eigenschaft Array Struktur (ohne Referenz-Eigenschaften) Struktur (mit Referenz-Eigenschaften)
Kopierprinzip Nach Wert (flache Kopie) Nach Wert Nach Wert (Referenzen werden kopiert)
Unabhängigkeit der Kopien Unabhängig nach Inhalt Unabhängig nach allen Eigenschaften Unabhängig nach Wert-Eigenschaften, abhängig nach Referenz-Eigenschaften
Tiefenkopie Erfordert explizite Implementierung Natürlich Erfordert explizite Implementierung für Referenz-Eigenschaften