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.