Junior — Middle
Kā slēgums sadarbojas ar struktūras piemēru programmēšanas valodā?
sobes.tech AI
Atbilde no AI
Swift struktūras ir ir vērtību tipus, tas nozīmē, ka, nododot vai piešķirot, tiek izveidots piemēra kopija. Aizvākumi, kas no ārējā konteksta iekļauj mainīgos, var ar tiem sadarboties, bet ir svarīgi saprast, ka tie iekļauj vērtību kopijas, nevis pašu piemēru.
Ja aizvākums iekļauj struktūras īpašību, tas iekļaus tās pašreizējo vērtību, nevis atsauci uz oriģinālu. Tādēļ izmaiņas aizvākošanas iekšienē neietekmēs oriģinālo struktūras piemēru, ja vien aizvākums nav atzīmēts kā @escaping un darbojas ar inout parametriem vai atsaucēm.
Piemērs:
struct Counter {
var count = 0
mutating func incrementer() -> () -> Void {
return { [self] in
print("Count is \(count)")
}
}
}
var counter = Counter()
let closure = counter.incrementer()
counter.count = 10
closure() // Izvadīs "Count is 0", jo aizvākums ir iekļāvis kopiju no self
Lai aizvākums varētu mainīt struktūras stāvokli, ir nepieciešams izmantot inout vai strādāt ar klasēm (atsauces tipiem).