Sobes.tech
Junior — Middle

Jak uzávěr interaguje s instancí struktury v programovacím jazyce?

sobes.tech AI

Odpověď od AI

Ve Swiftu jsou struktury typy hodnot, což znamená, že při předání nebo přiřazení je vytvořena kopie instance. Uzávěry, které zachycují proměnné z vnějšího kontextu, mohou s instancí struktury interagovat, ale je důležité pochopit, že zachycují kopie hodnot, nikoliv samotnou instanci.

Pokud uzávěr zachytí vlastnost struktury, zachytí její aktuální hodnotu, nikoliv odkaz na originál. Proto změny uvnitř uzávěru neovlivní původní instanci struktury, pokud není uzávěr označen jako @escaping a nepracuje s parametry inout nebo odkazy.

Pří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() // Vytiskne "Count is 0", protože uzávěr zachytil kopii self

Aby uzávěr mohl měnit stav struktury, je třeba použít inout nebo pracovat se třídami (referenčními typy).