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 (փոփոխությունը չի ազդել 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 Պահանջում է հատուկ իրականացում հղումային հատկությունների համար