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 (փոփոխությունը չի ազդել 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) | Արտահայտվում է որպես արժեք | Արտահայտվում է որպես արժեք (հղումները կպահպանվեն) |
| Անկախության մակարդակ | Անկախ ըստ պարունակության | Անկախ ըստ բոլոր հատկությունների | Անկախ ըստ հատկությունների-արժեքների, կախված հղումային հատկություններից |
| Գլխավոր կոպիացում | Պահանջում է հատուկ իրականացում | Ինherent | Պահանջում է հատուկ իրականացում հղումային հատկությունների համար |