Junior — Middle
Programlama dilinde kapanış, yapı örneğiyle nasıl etkileşir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Swift'te yapılar değer tipleridir, yani iletim veya atama sırasında örneğin bir kopyası oluşturulur. Kapanışlar, dış bağlamdan değişkenleri yakalarken, yapının örneğiyle etkileşime geçebilirler, ancak bunların değer kopyalarını yakaladıklarını ve kendilerini değil, anlamak önemlidir.
Bir kapanış, yapının bir özelliğini yakalarsa, onun mevcut değerini yakalar, orijinal referansını değil. Bu nedenle, kapanış içindeki değişiklikler, kapanış @escaping olarak işaretlenmiş ve inout parametreler veya referanslar ile çalışmıyorsa, yapının orijinal örneğini etkilemez.
Örnek:
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" yazdırır, çünkü kapanış self'in bir kopyasını yakaladı
Yapının durumunu değiştirebilmesi için, inout kullanmak veya sınıflarla (referans tipleri) çalışmak gerekir.