Sobes.tech
Junior — Middle

Hoe werkt een closure samen met een instantie van een structuur in een programmeertaal?

sobes.tech AI

Antwoord van AI

In Swift zijn structs waarde-types, dat wil zeggen dat bij het doorgeven of toewijzen een kopie van de instantie wordt gemaakt. Closures die variabelen uit de externe context vastleggen, kunnen met de instantie van de structuur interageren, maar het is belangrijk te begrijpen dat ze kopieën van de waarden vastleggen, niet de instantie zelf.

Als een closure een eigenschap van de structuur vastlegt, zal deze de huidige waarde ervan vastleggen, niet een verwijzing naar het origineel. Daarom zullen wijzigingen binnen de closure de oorspronkelijke instantie van de structuur niet beïnvloeden, tenzij de closure is gemarkeerd als @escaping en werkt met inout-parameters of referenties.

Voorbeeld:

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() // Drukt "Count is 0" af, omdat de closure een kopie van self heeft vastgelegd

Om de closure de staat van de structuur te laten wijzigen, moet je inout gebruiken of werken met klassen (referentietypes).