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 |