Sobes.tech
Middle

Jaký je rozdíl mezi kopírováním pole a struktur ve Swiftu?

sobes.tech AI

Odpověď od AI

Pole v Swiftu jsou struktury (struct).

Při kopírování pole se vytvoří nová kopie prvků. Změny v jednom poli neovlivní druhé.

var array1 = [1, 2, 3]
var array2 = array1 // Dojde ke kopírování
array2[0] = 10
// array1 = [1, 2, 3]
// array2 = [10, 2, 3]

Struktury v Swiftu jsou typy hodnot (value types). Při přiřazení nebo předání struktury do funkce se vytvoří nová kopie dat. Změny v jedné kopii struktury neovlivní ostatní kopie.

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

var point1 = Point(x: 0, y: 0)
var point2 = point1 // Dojde ke kopírování
point2.x = 10
// point1.x = 0
// point2.x = 10

Rozdíl spočívá v tom, že pole, jako struktury, vykazují chování typu-hodnota při kopírování, vytvářejíc úplnou kopii svých prvků. Struktury obecně jsou také typy-hodnota a při kopírování vytvářejí novou kopii svých vlastností. Proto platí u obou entit (polí a struktur) semantika kopírování podle hodnoty (copy-by-value). Rozdíl je v tom, že pole je kontejner pro jiné hodnoty, které mohou být jak typy-hodnota, tak typy-odkaz.