Sobes.tech
Middle

Фарқи нусхабардории массив ва структураҳо дар Swift чист?

sobes.tech AI

Ҷавоб аз AI

Капіраванне масіва ў Swift стварае новую незалежную копію ўсяго зместу. Змены ў зыходным масіве не ўплываюць на скапіраваны і наадварот.

Капіраванне структуры ў Swift таксама стварае новую копію ўсіх яе ўласцівасцей. Калі структура ўтрымлівае ўнутраныя спасылкавыя тыпы (напрыклад, класы), копіруецца спасылка на гэты аб'ект, а не сам аб'ект. Змены ў спасылкавым тыпе ўнутры скапіраванай структуры адлюстроўваюцца і ў зыходнай.

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

// Капіраванне структуры
var point1 = Point(x: 10, y: 20)
var point2 = point1 // Капіраванне структуры
point2.x = 30
print(point1.x) // Вывядзе 10 (point1 не змяніўся)

class Container {
    var value: Int
    init(value: Int) {
        self.value = value
    }
}

struct HasReference {
    var data: Container
}

// Капіраванне структуры з спасылкавым тыпам
var ref1 = HasReference(data: Container(value: 100))
var ref2 = ref1 // Капіраванне структуры
ref2.data.value = 200 // Змяняем спасылкавы тып унутры структуры
print(ref1.data.value) // Вывядзе 200 (змена адбілася)

// Капіраванне масіва (па значэнню)
var array1 = [1, 2, 3]
var array2 = array1 // Капіраванне масіва
array2[0] = 10
print(array1[0]) // Вывядзе 1 (змена ў array2 не паўплывала на array1)

// Капіраванне масіва, які ўтрымлівае спасылкавыя тыпы
var containers1 = [Container(value: 1), Container(value: 2)]
var containers2 = containers1 // Капіраванне масіва (копіруюцца спасылкі)
containers2[0].value = 10 // Змяняем праз спасылку ў array2
print(containers1[0].value) // Вывядзе 10 (змена адбілася ў array1)

Асаблівасць Масіў Структура (без спасылкавых уласцівасцей) Структура (з спасылкавымі ўласцівасцямі)
Прынцып капіравання Па значэнню (shallow copy) Па значэнню Па значэнню (спасылкі капіруюцца)
Незалежнасць копій Незалежныя па змесце Незалежныя па ўсіх уласцівасцях Незалежныя па ўласцівасцях-значэннях, залежныя ад спасылкавых уласцівасцей
Глыбокае капіраванне Патрабуе відавочнай рэалізацыі Натуральным чынам Патрабуе відавочнай рэалізацыі для спасылкавых уласцівасцей