Middle
Jaký je rozdíl mezi kopírováním pole a struktur ve Swiftu?
sobes.tech AI
Odpověď od AI
Kopírování pole v Swiftu vytvoří novou nezávislou kopii celého obsahu. Změny v původním poli neovlivní kopii a naopak.
Kopírování struktury v Swiftu také vytvoří novou kopii všech jejích vlastností. Pokud struktura obsahuje vložené referenční typy (například třídy), kopíruje se odkaz na tento objekt, nikoliv samotný objekt. Změny v referenčním typu uvnitř zkopírované struktury se odrážejí v originálu.
struct Point {
var x: Int
var y: Int
}
// Kopírování struktury
var point1 = Point(x: 10, y: 20)
var point2 = point1 // Kopírování struktury
point2.x = 30
print(point1.x) // Vypíše 10 (point1 se nezměnil)
class Container {
var value: Int
init(value: Int) {
self.value = value
}
}
struct HasReference {
var data: Container
}
// Kopírování struktury s referenčním typem
var ref1 = HasReference(data: Container(value: 100))
var ref2 = ref1 // Kopírování struktury
ref2.data.value = 200 // Změna referenčního typu uvnitř struktury
print(ref1.data.value) // Vypíše 200 (změna se odrazila)
// Kopírování pole (podle hodnoty)
var array1 = [1, 2, 3]
var array2 = array1 // Kopírování pole
array2[0] = 10
print(array1[0]) // Vypíše 1 (změna v array2 neovlivnila array1)
// Kopírování pole obsahujícího referenční typy
var containers1 = [Container(value: 1), Container(value: 2)]
var containers2 = containers1 // Kopírování pole (reference jsou kopírovány)
containers2[0].value = 10 // Změna přes referenci v array2
print(containers1[0].value) // Vypíše 10 (změna se odrazila v array1)
| Vlastnost | Pole | Struktura (bez referenčních vlastností) | Struktura (s referenčními vlastnostmi) |
|---|---|---|---|
| Princip kopírování | Podle hodnoty (mělká kopie) | Podle hodnoty | Podle hodnoty (reference se kopírují) |
| Nezávislost kopií | Nezávislé podle obsahu | Nezávislé podle všech vlastností | Nezávislé podle vlastností-hodnot, závislé na referenčních vlastnostech |
| Hluboká kopie | Vyžaduje explicitní implementaci | Přirozeně | Vyžaduje explicitní implementaci pro referenční vlastnosti |