Sobes.tech
Junior — Middle

Kako zatvaranje komunicira sa instancom strukture u jeziku programiranja?

sobes.tech АИ

Одговор од АИ

U Swift-u, strukture su tipovi vrednosti, što znači da se prilikom prenosa ili dodeljivanja kreira kopija instance. Zatvaranja, koja hvataju promenljive iz spoljnog konteksta, mogu da interaguju sa instancom strukture, ali je važno razumeti da hvataju kopije vrednosti, a ne samu instancu.

Ako zatvaranje hvata svojstvo strukture, ono će uhvatiti njegovu trenutnu vrednost, a ne referencu na original. Zbog toga, promene unutar zatvaranja neće uticati na originalnu instancu strukture, osim ako zatvaranje nije označeno kao @escaping i ne radi sa inout parametrima ili referencama.

Primer:

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() // Ispisaće "Count is 0", jer je zatvaranje uhvatilo kopiju self

Da bi zatvaranje moglo da menja stanje strukture, potrebno je koristiti inout ili raditi sa klasama (referentnim tipovima).