Junior — Middle
Kuidas sulgumine suhtleb struktuuri näitega programmeerimiskeeles?
sobes.tech AI
Vastus AI-lt
Swiftis on struktuurid väärtusetüübid, mis tähendab, et edastamisel või omistamisel luuakse eksemplari koopia. Sulgemised, mis haaravad välisest kontekstist muutujad, võivad nendega suhelda, kuid oluline on mõista, et nad haaravad väärtuste koopiad, mitte ise eksemplari.
Kui sulgemine haarab struktuuri omaduse, haarab see selle praeguse väärtuse, mitte viidet algsele. Seetõttu ei mõjuta muudatused sulgemise sees algset struktuuri eksemplari, välja arvatud juhul, kui sulgemine on märgitud @escaping ja töötab inout parameetrite või viidetega.
Näide:
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() // Kuvab "Count is 0", sest sulgemine haaras koopiat self-st
Et sulgemine saaks muuta struktuuri olekut, tuleb kasutada inout või töötada klassidega (viidetüübid).