Sobes.tech
Middle

Mi a különbség a tömb másolása és a struktúrák között Swiftben?

sobes.tech MI

Válasz az MI-től

A Swiftben való tömb másolása egy új, független példányt hoz létre az egész tartalomról. A forrás tömbben végzett változtatások nem befolyásolják a másolatot, és fordítva.

Egy struktúra másolása Swiftben szintén egy új példányt hoz létre az összes tulajdonságáról. Ha a struktúra beágyazott referencia típusokat (pl. osztályokat) tartalmaz, akkor a referencia másolódik, nem maga az objektum. A másolt struktúrában végzett referencia típusú változtatások megjelennek az eredetin is.

struct Point {
    var x: Int
    var y: Int
}

// Struktúra másolása
var point1 = Point(x: 10, y: 20)
var point2 = point1 // Struktúra másolása
point2.x = 30
print(point1.x) // 10-et fog kiírni (a point1 nem változott)

class Container {
    var value: Int
    init(value: Int) {
        self.value = value
    }
}

struct HasReference {
    var data: Container
}

// Referencia típusú struktúra másolása
var ref1 = HasReference(data: Container(value: 100))
var ref2 = ref1 // Struktúra másolása
ref2.data.value = 200 // A referencia típusú változtatás a struktúrában
print(ref1.data.value) // 200-at fog kiírni (a változás megjelenik)

// Tömb másolása (érték szerint)
var array1 = [1, 2, 3]
var array2 = array1 // Tömb másolása
array2[0] = 10
print(array1[0]) // 1-et fog kiírni (a változás nem befolyásolta az array1-et)

// Referencia típusokat tartalmazó tömb másolása
var containers1 = [Container(value: 1), Container(value: 2)]
var containers2 = containers1 // Tömb másolása (a referenciák másolódnak)
containers2[0].value = 10 // A referencia segítségével változtatunk
print(containers1[0].value) // 10-et fog kiírni (a változás megjelenik az array1-ben)

Tulajdonság Tömb Strukturális (referencia nélküli) Strukturális (referenciás tulajdonságokkal)
Másolási elv Érték szerint (felületes másolat) Érték szerint Érték szerint (referenciák másolódnak)
Másolatok függetlensége Tartalom szerint független Minden tulajdonság szerint független Tulajdonság-érték szerint független, referencia tulajdonságoktól függő
Mély másolat Egyértelmű megvalósítás szükséges Természetes módon Szükséges explicit megvalósítás referencia tulajdonságokra