Genel Kod Swift

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 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 🙂



Yazar hakkında

Kadir Kutluhan Alev

Kadir Kutluhan Alev

Swift ile iOS App geliştirme üzerine çalışıyorum.Bu araştırmaları yaparken öğrendiğim bilgileri mutfakta sizler ile paylaşıyorum.Sizde araştırmalarınızı bizimle paylaşın . Yorum yaparak mutfağın gelişmesine katkıda bulunun.

Yorumlar

Bir yorum yaz

This site uses Akismet to reduce spam. Learn how your comment data is processed.

swift-closures-ve-completion-handler-nedir-ne-ie-yarar