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) | Па значэнню | Па значэнню (спасылкі капіруюцца) |
| Незалежнасць копій | Незалежныя па змесце | Незалежныя па ўсіх уласцівасцях | Незалежныя па ўласцівасцях-значэннях, залежныя ад спасылкавых уласцівасцей |
| Глыбокае капіраванне | Патрабуе відавочнай рэалізацыі | Натуральным чынам | Патрабуе відавочнай рэалізацыі для спасылкавых уласцівасцей |