Middle
Mis vahe on massiivi ja struktuuride kopeerimisel Swiftis?
sobes.tech AI
Vastus AI-lt
Swiftis massiiv kopeerib uue sõltumatu kogu sisu koopiat. Algupärases massiivi muutused ei mõjuta kopeeritud ja vastupidi.
Swiftis struktuuri kopeerimine loob samuti uue koopiast kõikidest selle omadustest. Kui struktuur sisaldab sisemisi viidatüüpe (näiteks klassid), kopeeritakse viide sellele objektile, mitte ise objekt. Muutused viidatüübis struktuuri sees kajastuvad ka algses struktuuris.
struct Point {
var x: Int
var y: Int
}
// Struktuuri kopeerimine
var point1 = Point(x: 10, y: 20)
var point2 = point1 // Struktuuri kopeerimine
point2.x = 30
print(point1.x) // Väljasta 10 (point1 ei muutunud)
class Container {
var value: Int
init(value: Int) {
self.value = value
}
}
struct HasReference {
var data: Container
}
// Struktuuri kopeerimine viidatüüpi kasutades
var ref1 = HasReference(data: Container(value: 100))
var ref2 = ref1 // Struktuuri kopeerimine
ref2.data.value = 200 // Muudame viidatüüpi struktuuris
print(ref1.data.value) // Väljasta 200 (muutus kajastub)
// Massiivi kopeerimine (väärtuse järgi)
var array1 = [1, 2, 3]
var array2 = array1 // Massiivi kopeerimine
array2[0] = 10
print(array1[0]) // Väljasta 1 (muudatused array2-s ei mõjutanud array1)
// Massiivi kopeerimine, mis sisaldab viidatüüpe
var containers1 = [Container(value: 1), Container(value: 2)]
var containers2 = containers1 // Massiivi kopeerimine (viited kopeeritakse)
containers2[0].value = 10 // Muudame viitega array2-s
print(containers1[0].value) // Väljasta 10 (muutus kajastub ka array1-s)
| Omadus | Massiiv | Struktuur (ilma viidatüüpide omadusteta) | Struktuur (viidatüüpidega) |
|---|---|---|---|
| Kopeerimise põhimõte | Väärtuse järgi (shallow copy) | Väärtuse järgi | Väärtuse järgi (viited kopeeritakse) |
| Sõltumatuse tase | Sõltumatu sisu järgi | Sõltumatu kõigi omaduste järgi | Sõltumatu omaduste-väärtuste järgi, sõltub viidatüüpidest |
| Sügav kopeerimine | Vajalik selge teostus | Loomulikult | Vajalik selge teostus viidatüüpide jaoks |