Sobes.tech
Junior — Middle

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.