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га таасир эткен жок)
// шилтемелүү түрлөрдү камтыган массивдин көчүрмөсү
var containers1 = [Container(value: 1), Container(value: 2)]
var containers2 = containers1 // Массивдин көчүрмөсү (шилтемелер көчүрүлөт)
containers2[0].value = 10 // array2 аркылуу өзгөртүү
print(containers1[0].value) // 10 чыгат (өзгөртүү array1да да көрүнүп турат)
| Өзгөчөлүк | Массив | Структура (шилтемелүү мүнөздөмөлөрсүз) | Структура (шилтемелүү мүнөздөмөлөр менен) |
|---|---|---|---|
| Көчүрүү принциби | Баа боюнча (shallow copy) | Баа боюнча | Баа боюнча (шилтемелер көчүрүлөт) |
| Өзүнчө болуу | Мазмун боюнча көзкарандысыз | Бардык мүнөздөмөлөр боюнча көзкарандысыз | Мүнөздөмөлөр-баалар боюнча көзкарандысыз, шилтемелүү мүнөздөмөлөргө көзкарандысыз |
| Терең көчүрүү | Ачык ишке ашыруу талап кылынат | Табигый жол менен | Шилтемелүү мүнөздөмөлөр үчүн ачык ишке ашыруу талап кылынат |