Junior — Middle
Kuo skiriasi nuorodos ir reikšmės tipai Swift kalboje?
sobes.tech AI
Atsakymas iš AI
Swift kalba, duomenų tipus skirsto į reikšmės tipus (value types) ir nuorodų tipus (reference types).
-
Reikšmės tipai (pavyzdžiui,
struct,enum, tupliai) kopijuojami priskyrimo arba perdavimo funkcijai metu. Tai reiškia, kad kiekviena kintamoji turi savo nepriklausomą duomenų kopiją. -
Nuorodų tipai (klasės
class) perduodami nuorodą į tą patį objektą atmintyje. Pakeitimai per vieną nuorodą bus matomi ir per kitas.
Pavyzdys:
struct Point {
var x: Int
var y: Int
}
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var p1 = Point(x: 0, y: 0)
var p2 = p1
p2.x = 10
print(p1.x) // 0, nes p2 yra p1 kopija
var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"
print(person1.name) // Bob, nes abu nuorodoja į tą patį objektą
Todėl skirtumas tas, kad reikšmės tipai kopijuojami, o nuorodų tipai perduoda nuorodą į tą patį objektą.