Sobes.tech
Middle

Jaký je rozdíl mezi kopírováním pole a kopírováním struktury v programovacím jazyce Swift?

sobes.tech AI

Odpověď od AI

Zkopírovaná struktura je nový nezávislý exemplář. Změny v jedné struktuře neovlivní druhou.

Kopírování pole (Array) v Swiftu je ve výchozím nastavení "copy-on-write" (kopírování při zápisu). To znamená, že při vytvoření nové reference na pole se data nekopírují, dokud jedna z kopií není změněna. Do té doby obě proměnné odkazují na stejné prvky v paměti. Při změně jedné z kopií je vytvořen nový nezávislý exemplář dat.

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

var p1 = Point(x: 1, y: 2)
var p2 = p1 // Kopie struktury. p2 je nový exemplář

p2.x = 10 // Změna p2 neovlivní p1

print("p1: \(p1.x), \(p1.y)") // Výstup: p1: 1, 2
print("p2: \(p2.x), \(p2.y)") // Výstup: p2: 10, 2

var array1 = [1, 2, 3]
var array2 = array1 // Kopie při zápisu

array2[0] = 10 // Dochází ke skutečné kopii dat

print("array1: \(array1)") // Výstup: array1: [1, 2, 3]
print("array2: \(array2)") // Výstup: array2: [10, 2, 3]

Rozdíl spočívá v základním chování: struktury jsou vždy kopírovány podle hodnoty, zatímco pole, jako struktury, implementují optimalizaci "copy-on-write" pro efektivnější správu paměti při více odkazech.