Sobes.tech
Junior — Middle

Hogyan működik a záródás egy struktúra példányával a programozási nyelvben?

sobes.tech MI

Válasz az MI-től

Swiftben a struktúrák érték típusok, azaz átadás vagy hozzárendelés esetén másolat készül az példányról. A zárványok, amelyek külső kontextusból változókat ragadnak meg, interakcióba léphetnek a struktúra példányával, de fontos megérteni, hogy azok másolatokat ragadnak meg az értékekből, nem magát a példányt.

Ha egy zárvány megfog egy struktúra tulajdonságot, akkor annak aktuális értékét fogja meg, nem az eredeti hivatkozását. Ezért a zárványon belüli változtatások nem befolyásolják az eredeti struktúra példányát, kivéve, ha a zárványt @escaping-ként jelöljük és inout paraméterekkel vagy hivatkozásokkal dolgozik.

Példa:

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() // Kiírja: "Count is 0", mert a zárvány megfogta self másolatát

Ahhoz, hogy a zárvány módosítani tudja a struktúra állapotát, az inout-ot kell használni, vagy osztályokkal (referencia típusokkal) kell dolgozni.