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