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.