Sobes.tech
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).