DELEGATIONS

Merhaba bu yazımda temsilcileri yani delegations konusunda ufak bazı bilgiler vereceğim.

Bu yazıda şu konulara değinilmiştir;

  • Delegasyon nasıl kullanılır?
  • respondsToSelector ile temsil edilen classta methodun olup olmadığı nasıl kontrol edilir?
  • Opsiyonel methodlar yani temsil edilen classta methodun olup olmamasının zorunlu olmadığı methodlar nasıl tanımlanır?

 

Örneğimizde bir ViewController classı olacak. Bu class uygulamanın ilk açıldığı sayfanın classı olacak. Bir de OtherClass diye bir sınıfımız daha olacak. ViewController’dan OtherClass’ı çağıracağız ve OtherClass’ta ViewController’ı delegate isimli obje ile temsil edeceğiz. Delegate objesi aslen bir OtherClassDelegate protokolü olup, ViewController’da protokole tanımlı methodların var olmasını bekleyecek. Biz basitçe ViewController’dan OtherClass isimli sınıfı çağırıp iş yaptıracağız, burada işimiz bittiğinde ViewController’da tanımlı protocol aracılığıyla işimizin bittiğine dair mesajı delegasyon sayesinde dönmüş olacağız.

İlk iş UIViewController’dan türeyen ViewController ve NSObject’ten türeyen OtherClass sınıflarımızı oluşturalım.

OtherClass.h dosyamızı şu şekilde oluşturalım;

Kodda görüleceği üzere OtherClassDelegate isimli bir protocol oluşturduk. Buna bir tane “zorunluOlmasiGerekenMethod” isimli bir method ismi verdik. Bu protocolün tanımlanacağı ViewController classında bu methodun olması zorunlu olacak.

Bir de @optional tagıyla testMethod isimli bir method tanımladık. Bu method tanımlandığı classta olmasa da olur bir method. Bu methodu daha sonra respondsToSelector ile kontrol ediyor olacağız.

Son olarak OtherClass sınıfımızda ise delegate isimli OtherClassDelegate protocolü ile temsil edilen temsilci bir objemizi koyduk.

Daha sonra ViewController.h’a gelip şunları ekliyoruz;

Görülceği üzere ilk olarak OtherClass.h ‘i import ediyoruz. Sonra OtherClassDelegate protokolünü <> içersinde implement ediyoruz

Screen Shot 2017-08-20 at 15.29.32

ViewController.m classında testMethod methodunu yukardaki gibi yazmamıza rağmen zorunluOlmasiGerekenMethod methodu olmadığı için hata vermektedir. Şayet zorunluOlmasiGerekenMethod ve testMethod methodu olmasaydı bu durumda hata vermeden çalışmaya devam edecekti çünkü testMethod optional bir method yani olmasada olur bir method.

Şimdi ViewController.m ‘e protocoldeki optional olanlarda dahi tüm methodları ekleyerek devam edelim.

Yukarda görülebileceği gibi ViewController ekrana yüklendiğinde OtherClass isimli classımız oluşturulup startWorking methodu çağrılıyor. Ayrıca OtherClass sınıfındaki delegate objesi ViewController ile OtherClassDelegate protokölü üzerinden temsil ediliyor.

ViewController.m classını da son haline getirelim.

Yukarda görüleceği üzere startWorking methodu çağrıldığı zaman logta ilk olarak “OtherClass classi calisiyor” outputu veriliyor sonra respondsToSelector ile testMethod isimli bir method olup olmadığı kontrol ediliyor. Eğer delegate objesinin temsil ettiği classta testMethod isimli bir method var ise “testMethod varmış!” yazıyor ve temsil edilen ViewController classındaki testMethod isimli method çağrılıyor, eğer böyle bir method yok ise sadece “testMethod yokmuş!” diye bir output veriliyor.

Yazımızdaki örneği birebir kullandığınızda aşağıdaki gibi bir output elde ediyorsunuz;

testMethod isimli bir method ViewController’da olmasaydı output şöyle olacaktı;

 

143 total views, 1 views today

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir