Sobes.tech
Middle

Kuo skiriasi masyvo ir struktūrų kopijavimas Swift?

sobes.tech AI

Atsakymas iš AI

Swift'e masyvai (arrays) yra struktūros (struct).

Kopijuojant masyvą, sukuriamas naujas elementų kopijos egzempliorius. Pakeitimai viename masyve neįtakoja kito.

var array1 = [1, 2, 3]
var array2 = array1 // Kopijavimas vyksta
array2[0] = 10
// array1 = [1, 2, 3]
// array2 = [10, 2, 3]

Swift struktūros (struct) yra reikšmių tipai (value types). Priskiriant ar perduodant struktūrą funkcijai, sukuriama nauja duomenų kopija. Pakeitimai vienoje struktūros kopijoje neįtakoja kitų.

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

var point1 = Point(x: 0, y: 0)
var point2 = point1 // Kopijavimas vyksta
point2.x = 10
// point1.x = 0
// point2.x = 10

Skirtumas tas, kad masyvai, kaip struktūros, rodo reikšmės tipo elgseną kopijavimo metu, sukurdami pilną savo elementų kopiją. Struktūros apskritai taip pat yra reikšmės tipai ir kopijuojant, jos sukuria naują savo savybių kopiją. Todėl, abiem objektams (masyvams ir struktūroms) taikoma copy-by-value semantika. Skirtumas tas, kad masyvas yra konteineris kitų reikšmių, kurios gali būti tiek reikšmės, tiek nuorodos tipai.