Sobes.tech
Middle

Jsou standardní kolekce polí typy hodnot a referenční typy?

sobes.tech AI

Odpověď od AI

Pole (Array) v jazyce Swift jsou struktury (struct), a struktury jsou typy hodnot (Value Types). Při přiřazení nebo předání pole se vytvoří jeho kopie.

Nicméně, pro optimalizaci výkonu, má systém kopírování pole chování Copy-on-Write. To znamená, že skutečná kopie dat pole se provádí až při první úpravě jedné z kopií. Do té doby sdílejí obě kopie stejnou datovou paměť.

Typy hodnot: Struct, Enum, Int, String, Double, Bool. Typy odkazů: Class, Function, Closure.

Příklad ilustrující Copy-on-Write:

var initialArray = [1, 2, 3]
var copiedArray = initialArray // Zatím žádná skutečná kopie dat

print(initialArray[0]) // 1
print(copiedArray[0])  // 1

copiedArray[0] = 10     // Zde dochází ke skutečné kopii dat

print(initialArray[0]) // 1 (původní pole se nezměnilo)
print(copiedArray[0])  // 10 (pouze kopie se změnila)