Middle
Aký je rozdiel medzi kopírovaním poľa a kopírovaním štruktúry v programovacom jazyku Swift?
sobes.tech AI
Odpoveď od AI
Skopírovaná štruktúra je nový nezávislý exemplár. Zmeny v jednej štruktúre neovplyvňujú druhú.
Kopírovanie poľa (Array) v Swift je predvolene vykonávané ako "copy-on-write" (kopírovanie pri zápise). To znamená, že pri vytvorení novej referencie na pole sa údaje nekopírujú, kým jedna z kópií nebude zmenená. Do tej doby obe premenné odkazujú na tie isté prvky v pamäti. Pri zmene jednej z kópií sa vytvorí nový nezávislý exemplár dát.
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // Kopírovanie štruktúry. p2 je nový exemplár
p2.x = 10 // Zmena p2 neovplyvní 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 // Kopírovanie pri zápise
array2[0] = 10 // Dochádza k skutočnému kopírovaniu dát
print("array1: \(array1)") // Výstup: array1: [1, 2, 3]
print("array2: \(array2)") // Výstup: array2: [10, 2, 3]
Rozdiel spočíva v základnom správaní: štruktúry sa vždy kopírujú podľa hodnoty, zatiaľ čo polia, ako štruktúry, implementujú optimalizáciu "copy-on-write" pre efektívnejšie riadenie pamäte pri viacerých referenciách.