Junior — Middle
Kā atšķirt atsauces balstītus datu tipus no tiešā veidā vērtības glabājošiem datu tipiem?
sobes.tech AI
Atbilde no AI
iOS (Swift un Objective-C) datu tipi tiek ir sadalīti pēc vērtību tipiem (value types) un atsauces tipiem (reference types).
-
Vērtību tipi glabā datus tieši. Piešķirot vai nododot funkcijai, tiek izveidots datu kopija. Swift šajā grupā ietilpst struktūras (
struct), enumerācijas (enum) un pamata tipi, piemēram,Int,Double,Bool. -
Atsauces tipi glabā atsauci uz atmiņas apgabalu, kur atrodas dati. Piešķirot, tiek kopēta atsauce, nevis dati. Izmaiņas caur vienu atsauci ir redzamas arī citur. Swift šie ir klases (
class).
Kā tos atšķirt:
- Ja Swift tipa deklarācija ir kā
structvaienum, tas ir vērtību tips. - Ja tas ir kā
class, tas ir atsauces tips.
Piemērs:
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 - kopija nav mainījusies
var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"
print(person1.name) // Bob - abas mainīgās norāda uz to pašu objektu
Tādējādi, novērojot piešķiršanas un izmaiņu uzvedību, var atšķirt atsauces tipus no tiem, kas glabā vērtības tieši.