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-ში არ ზემოქმედებს)

// შიდა მიმთითებელ ტიპებს შეიცავს მასივის კოპირება
var containers1 = [Container(value: 1), Container(value: 2)]
var containers2 = containers1 // მასივის კოპირება (მიმთითებლები კოპირებულია)
containers2[0].value = 10 // ცვლილება array2-ის მეშვეობით
print(containers1[0].value) // გამოიტანს 10 (ცვლილება აისახა array1-ში)

მახასიათებელი მასივი სტრუქტურა (შიდა მიმთითებელ თვისებებით) სტრუქტურა (შიდა მიმთითებელ თვისებებთან)
კოპირების პრინციპი მნიშვნელობის მიხედვით (shallow copy) მნიშვნელობის მიხედვით მნიშვნელობის მიხედვით (მიმთითებლები კოპირებულია)
დამოუკიდებლობა კოპიებს დამოუკიდებელი შინაარსით დამოუკიდებელი ყველა თვისებით დამოუკიდებელი თვისებების-მნიშვნელობებით, მიმთითებელ თვისებებზე დამოკიდებული
ღრმა კოპირება საჭიროებს გამოკვეთილ განხორციელებას ბუნებრივად საჭიროებს გამოკვეთილ განხორციელებას მიმთითებელ თვისებებზე