Junior — Middle
Ako interaguje uzáver s inštanciou štruktúry v jazyku programovania?
sobes.tech AI
Odpoveď od AI
V Swiftu sú štruktúry typy hodnôt, čo znamená, že pri prenose alebo priraďovaní sa vytvorí kópia inštancie. Zatvory, ktoré zachytávajú premenné z vonkajšieho kontextu, môžu interagovať s inštanciou štruktúry, ale je dôležité pochopiť, že zachytávajú kópie hodnôt, nie samotnú inštanciu.
Ak zatváranie zachytí vlastnosť štruktúry, zachytí jej aktuálnu hodnotu, nie odkaz na originál. Preto zmeny vnútri zatvárania nebudú ovplyvňovať pôvodnú inštanciu štruktúry, pokiaľ nie je zatváranie označené ako @escaping a nepracuje s parametrami inout alebo odkazmi.
Príklad:
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() // Vytlačí "Count is 0", pretože zatváranie zachytilo kópiu self
Aby zatváranie mohlo meniť stav štruktúry, je potrebné použiť inout alebo pracovať s triedami (referenčnými typmi).