Sobes.tech
Middle

Aký je rozdiel medzi kopírovaním poľa a štruktúr v Swift?

sobes.tech AI

Odpoveď od AI

Kopírovanie poľa v Swift vytvára novú nezávislú kópiu celého obsahu. Zmeny v pôvodnom poli neovplyvňujú skopírované a naopak.

Kopírovanie štruktúry v Swift tiež vytvára novú kópiu všetkých jej vlastností. Ak štruktúra obsahuje vnorené referenčné typy (napríklad triedy), kopíruje sa odkaz na tento objekt, nie samotný objekt. Zmeny v referenčnom type vnútri skopírovanej štruktúry sa prejavia aj v pôvodnej.

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

// Kopírovanie štruktúry
var point1 = Point(x: 10, y: 20)
var point2 = point1 // Kopírovanie štruktúry
point2.x = 30
print(point1.x) // Vypíše 10 (point1 sa nezmenil)

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

struct HasReference {
    var data: Container
}

// Kopírovanie štruktúry s referenčným typom
var ref1 = HasReference(data: Container(value: 100))
var ref2 = ref1 // Kopírovanie štruktúry
ref2.data.value = 200 // Meniame referenčný typ vo vnútri štruktúry
print(ref1.data.value) // Vypíše 200 (zmena sa prejavila)

// Kopírovanie poľa (podľa hodnoty)
var array1 = [1, 2, 3]
var array2 = array1 // Kopírovanie poľa
array2[0] = 10
print(array1[0]) // Vypíše 1 (zmena v array2 neovplyvnila array1)

// Kopírovanie poľa obsahujúceho referenčné typy
var containers1 = [Container(value: 1), Container(value: 2)]
var containers2 = containers1 // Kopírovanie poľa (kopírujú sa odkazy)
containers2[0].value = 10 // Menieme cez odkaz v array2
print(containers1[0].value) // Vypíše 10 (zmena sa prejavila v array1)

Funkcia Pole Štruktúra (bez referenčných vlastností) Štruktúra (s referenčnými vlastnosťami)
Princíp kopírovania Podľa hodnoty (shallow copy) Podľa hodnoty Podľa hodnoty (odkazy sa kopírujú)
Nezávislosť kópií Nezávislé podľa obsahu Nezávislé podľa všetkých vlastností Nezávislé podľa vlastností-hodnôt, závislé od referenčných vlastností
Hlboké kopírovanie Vyžaduje explicitnú implementáciu Prirodzené Vyžaduje explicitnú implementáciu pre referenčné vlastnosti