Как да различим типовете данни, базирани на препратки, от типовете данни, които съхраняват стойности директно?
sobes.tech AI
Отговор от AI
В iOS (Swift и Objective-C) типовете данни се делят на стойностни типове (value types) и референтни типове (reference types).
-
Стойностните типове съхраняват данните директно. При присвояване или предаване към функция се създава копие на данните. В Swift към тях се отнасят структури (
struct), изброявания (enum) и основни типове катоInt,Double,Bool. -
Референтните типове съхраняват препратка към област от памет, където се намират данните. При присвояване се копира препратката, не самите данни. Промените чрез една препратка са видими и през други. В Swift това са класове (
class).
Как да ги различим:
- В Swift, ако типът е обявен като
structилиenum, това е стойностен тип. - Ако е обявен като
class, това е референтен тип.
Пример:
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 - копието не се промени
var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"
print(person1.name) // Bob - и двете променливи сочат към един и същи обект
По този начин, по поведението при присвояване и промяна, може да се различават типовете, базирани на препратки, от тези, които съхраняват стойности директно.