Junior — Middle
Жабдуулук программалоо тилинде структуранын үлгүсү менен кандайча өз ара аракеттешет?
sobes.tech AI
AIден жооп
Swiftте структуралар — бул маанилүү түрлөр, демек, өткөрүп берүү же белгилөө учурунда нускасынын көчүрмөсү түзүлөт. Жабуулары, сырттан келген өзгөрмөлөрдү кармап алганда, структуранын нускасы менен иштеше алат, бирок алар маанилердин көчүрмөлөрүн кармап алат, өзү эмес.
Эгер жабуу структуранын өзгөчөлүгүн кармап алса, ал анын учурдагы маанисин кармап калат, оригиналга шилтеме кылбайт. Ошондуктан, жабуу ичинде жасалган өзгөртүүлөр структуранын оригинал нускасына таасир этпейт, эгер ал @escaping деп белгиленбесе жана inout параметрлери же шилтемелер менен иштебесе.
Мисал:
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() // "Count is 0" деп чыгат, анткени жабуу selfнин көчүрмөсүн кармап алган
Жабуу структуранын абалын өзгөртүүгө мүмкүнчүлүк берүү үчүн, inout колдонуу же класстар менен ( шилтемелүү түрлөр менен) иштөө керек.