Swiftte kapatma adı verilen yapılar C ve Objective C’deki blok yapılarına ya da başka dillerdeki lambda yapılarına benzer.
Global ve iç içe kullanılmış fonksiyonlar aslında kapatmaların özel halleridir. Global fonksiyonlar adı olan fakat değer almayan kapatmalardır. İç içe (nested) fonksiyonlar ise ismi olan ve değer kullanan kapatmalardır.
Nihayet normal kapatmalar ise isimsiz olarak kullanılan kapatmalardır.
Bir kapatmanın genel yazılımı,
{ (Parametreler) -> Gönderdiği Tip in
Deyimler
}
şeklindedir.
ÖRNEK:
Aşağıdaki closure, s1<s2 ise true s1>s2 ise false değerini göndermektedir:
{(s1: String, s2: String) -> Bool in
return s1 < s2 })
Bu closure, aşağıda sort (sıralama) fonksiyonunun bir argümanı gibi kullanılmıştır:
var sehir = ["londra", "paris", "atina", "barcelona", "münih"]
sehir = sehir.sorted(by:({(s1: String, s2: String) -> Bool in return s1 < s2 }))
print(sehir)
PROGRAMIN ÇIKTISI
Program çalıştırılınca, sehir dizisindeki şehirler alfabetik sıraya dizilmişlerdir:
[atina, barcelona, londra, münih, paris]
Aşağıdaki programda ise ters alfabetik sıra elde edilmiştir:
var sehir = ["londra", "paris", "atina", "barcelona", "münih"]
sehir = sehir.sorted(by:({(s1: String, s2: String) -> Bool in return s1 > s2 }))
print(sehir)
[paris, münih, londra, barcelona, atina]