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.