Proqramlaşdırma dilində bağlama struktur nümunəsi ilə necə qarşılıqlı əlaqə qurur?
sobes.tech Süni İntellekt
AI-dan cavab
Swift-də strukturlar dəyər növləridir, yəni ötürülmə və ya təyin etmə zamanı nümunənin surəti yaradılır. Qapanışlar, xarici kontekstdən dəyişənləri ələ keçirərək, struktur nümunəsi ilə qarşılıqlı əlaqə qura bilərlər, lakin onların dəyərlərin surətini ələ keçirdiklərini və özlərini deyil, başa düşmək vacibdir.
Əgər qapanış strukturun xüsusiyyətini ələ keçirirsə, onun cari dəyərini ələ keçirəcək, orijinala istinad etməyəcək. Buna görə, qapanış daxilindəki dəyişikliklər, əgər qapanış @escaping kimi işarələnmiş və inout parametrlər və ya istinadlar ilə işləyirsə, strukturun orijinal nümunəsinə təsir etməyəcək.
Nümunə:
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" çap edir, çünki qapanış self-in surətini ələ keçirib
Qapanışın strukturun vəziyyətini dəyişə bilməsi üçün, inout istifadə etmək və ya siniflərlə (istinad növləri) işləmək lazımdır.