Sobes.tech
Middle

Ko nozīmē, ka vērtības tips (value type) pieder atsauces tipam (reference type)?

sobes.tech AI

Atbilde no AI

Vērtības tips kopējas pie piešķiršanas vai nodošanas funkcijai, savukārt saites tips nododams pa saiti, tas ir, tiek kopēts norādītājs uz esošo eksemplāru.

Vērtību tipi (Value Types):

  • Struktūras (struct)
  • Enumi (enum)
  • Tūpiji (tuple)
  • Lielākā daļa pamattipu (Int, String, Bool, Array, Dictionary, Set u.c.)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // kopē p1 vērtību uz p2
p2.x = 10

// p1.x joprojām ir 1, p2.x ir 10
print("p1: \(p1.x)")
print("p2: \(p2.x)")

Saites tipi (Reference Types):

  • Klases (class)
  • Funkcijas (closure)
class Coordinate {
    var x: Int
    var y: Int

    init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }
}

var c1 = Coordinate(x: 1, y: 2)
var c2 = c1 // c2 norāda uz to pašu eksemplāru kā c1
c2.x = 10

// c1.x arī ir 10
print("c1: \(c1.x)")
print("c2: \(c2.x)")

Galvenās atšķirības:

Raksturlielums Vērtības tips (Value Type) Saites tips (Reference Type)
Piešķiršana Vērtības kopēšana Norādes (pievienotāja) kopēšana
Atmiņa Atvēlēta stakā (vienkāršiem gadījumiem) Atvēlēta kaudzē
Koplietošana Katram mainīgajam ir sava kopija Vairāki mainīgie var norādīt uz vienu eksemplāru
Mutabilitāte Lai mainītu, jāmaina kopija Mainot caur vienu norādi, tas ir redzams visiem citiem

iOS izstrādē bieži tiek izmantoti abi tipi. Zinot to atšķirības, var izvēlēties piemērotu tipu konkrētajam uzdevumam un izvairīties no nevēlamiem blakus efektiem, īpaši strādājot ar mutabliem datiem.