Sobes.tech
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ā struct vai enum, 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.