Swift Closures ve Completion Handler Nedir ? Ne işe yarar ?

Merhaba arkadaşlar bu yazım da Swift’te anlaşılması en güç konulardan biri olan Closures ‘ lardan ve Completion Handler ‘ dan bahsedeceğim. Bu*başlığın diğer dillerde ki karşılığı lambda expression konusuna uyuyor. Uzatmadan hemen başlayalım ?   Bazı insanlar fonksiyon ve closures’ların farklı syntax’lara sahip aynı şeyi yapan yapılar olduğunu bazıları ise fonksiyonların* closures’ların özel bir tipi […]

Merhaba arkadaşlar bu yazım da Swift’te anlaşılması en güç konulardan biri olan Closures ‘ lardan ve Completion Handler ‘ dan bahsedeceğim. Bu*başlığın diğer dillerde ki karşılığı lambda expression konusuna uyuyor. Uzatmadan hemen başlayalım

Bazı insanlar fonksiyon ve closures’ların farklı syntax’lara sahip aynı şeyi yapan yapılar olduğunu bazıları ise fonksiyonların* closures’ların özel bir tipi olduğunu söyler.
Farkları daha iyi ayırt edebilmek için ilk önce fonksiyonlara kısaca bakalım (Swift’te fonksiyonlar konusunu anlattığım yazıma buradan ulaşabilirsiniz.)
View the code on Gist.
Gayet basit sadece tek parametre alan ve geriye Integer bi değer döndüren fonksiyon yazdık.
Bu fonksiyonun sizden tipini yazmanız istense nasıl yazarsınız ? Şöyle…
(Int) -> (Int)Gördüğünüz gibi fonksiyonun tipini yazmak gayet kolay son örnek olarak eğer 2 parametre alan ve geriye bir değer döndüren fonksiyonun tipini yazmak isteseydik.
(Int,Int) -> (Int)Aynen böyle yazacaktık. Şimdi gelelim Closure yazmaya .

Closure Tanımlama

Closure syntax olarak oldukça kolaydır. Fonksiyon tipinin nasıl yazıldığını yukarıda gördük. Closure’ da sadece iki süslü parantez arasına tipi yazarız. Geri dönüş tipinden sonra da in anahtar kelimesini ekleriz.
? Dikkat: Closures’ lar default parametre değerine sahip olamaz.

Şimdi aşağı da ki örnek de aynı işi yapan işlevi hem fonksiyon hemde closure ile yazdık bakalım .

View the code on Gist.
Closure için func anahtar kelimesi ve adı olmayan fonksiyon diyebiliriz. in anahtar kelimesi parametreler ve return kısımlarını ayırmak için kullanılır.
Shorthand Argument Names

Closures parametreleri isimden ziyade pozisyona göre referans olabilir. Örneğimize bakalım .

View the code on Gist.
? Completion Handler

Completion Handler bir şeyi dinleme işine yarar gibi düşünebiliriz. Bir olay tamamlandığında bundan faydalanıp bir sonraki adımın ne olacağını belirtiriz.
let handlerBlock: (Bool) -> Void = { isTamamlandi in
if isTamamlandi {
print("Sonunda işi bitirdik huh !")
} ( Ek Bilgi : Sizde buradaki örnek de olduğu gibi sadece işi tamamladığınızda
sonunda özgürüm dememek için sevdiğiniz işi yapın her zaman özgür olun )handlerBlock(true) // "Sonunda işi bitirdik huh !"Gördüğünüz gibi Bool bir parametre geliyor daha sonra bu gelen değer isTamamlandi değişkeni içine atanıyor . Gövde kısmında ise kontrol edilip ekrana sonuç yazılıyor.

Completion Handler’dan* Veri* Geçirme

Alamofire.request("https://data.com").responseJSON { response in
print(response)
}Burada şimdilik Alamofire kısmına takılmayalım. Bilmemiz gereken şey Alamofire’ın bizim için internet de verilen url’ye bir istek yaptığı ve bunun sonucunda bir data aldığı peki data nerede ?*Data response içindedir. Bunu print ile konsola yazdırdığımızda internetten gelen veriyi göreceksiniz. İlerde gelen veriyi parse etme ve kullanmayı da anlatacağım. Araştırmalarım devam ediyor Eğer yanlış veya eksik bir bilgi yazdıysam yorumlarınız ile veya sosyal medya linklerim üzerinden lütfen iletiniz.
Okuduğunuz için teşekkürler . Herkeze mutlu kodlamalar