
Swift Closures ve Completion Handler Nedir ? Ne işe yarar ?
İçindekiler
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 fonksiyonları kısaca bir tekrar edelim. (Fonksiyonların detaylı anlatımına buradan ulaşabilirsiniz.)
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 .
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 .
★ 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 🙂