Swift: Protocol ve Delegate

Protocol

Protokole TDK açıklamasından yola çıkarak anlam yüklemeye çalışalım. TDK protokol’ü açıklarken, “Bir toplantı, oturum, soruşturma sonunda imzalanan belge” ve “Diplomatlar arasında yapılan anlaşma tutanağı” ifadelerini kullanmıştır. Belge ve tutanak ifadeleri üzerinden devam edersek, bir takım görevlerin aktarılmasında kullanılan kontrat olarak düşünebiliriz. Diğer programlama dillerinde interface ve/veya soyut sınıf olarak da isimlendirilmektedirler.

Protokoller görevlere “required” ve “optional” olmak üzere iki farklı biçimde sorumluluk yükleyebilir. Yani bir sınıf, bir protokole uyma sözü veriyorsa onun bazı özelliklerini uygulamak zorundadır bazılarını ise isteğe veya duruma bağlı olarak uygulayabilir.

Delegate

Yine TDK üzerinden ilerleyerek açıklamak istiyorum. Delege kelimesi TDK tarafından, “Kendisine yetki verilerek bir yere veya birinin katına gönderilen kimse, elçi, murahhas” olarak açıklanmaktadır. Şimdi programlama açısından da konuya bakarsak, bir sınıfı öncesinden belirlenmiş bir “tutanak”, “belge” için sorumlu tutmak, sınıfa görev vermek olarak düşünebiliriz.

Öncesinde protokol kullanarak oluşturduğumuz antlaşmayı bir sınıfa delege ederiz. Bu sınıf antlaşma gereği zorunlu metotları uygular ve optional metotları da dilerse ve gerekirse uygular.

Senaryo

Örneğin ufak bir UI component yazalım ve kendisine tıklandığı zaman sorumlu tuttuğumuz viewController’a haber versin.

Öncelikle bir protocol yazarak bir nevi antlaşmayı hazırlıyoruz. Bizim protokolümüz üzerine basıldığında “message” adında String alan bir fonksiyon içeriyor.

Ardından kendimize içerisinde bir adet UILabel bulunduran basit bir UI elemanı oluşturalım.

Burada önemli noktalara bakalım.

  1. Öncelikle oluşturduğumuz protokolü sınıfın bir elemanı olarak belirtiyoruz ve bu optional olduğu için daha sonrasında dileyen sınıf görevlerden sorumlu olup dilemeyen sorumlu olmayabilir.
  2. Ardından bir şekilde delegemiz kendi fonksiyonunu çalıştırmalı ve sorumlu kişiye haber verip yapması gereken işi yapma zamanının geldiğini söylemeli. Burada biz UI elemanımızın üzerine tıklandığı zaman bu işi yapması gereken bir yapı oluşturduk.

 

Devamında ViewController’ımız üzerinde UI elemanımızı oluşturuyoruz. Burada sınıfımızı view’ımızın aktivitelerinden sorumlu hale getiriyoruz ve bir de mesaj veriyoruz.

Son olarak ViewController’ımızın sorumlu işleri yapması için extension yazarak oluşturduğumuz antlaşmaya ne şekilde uyacağını belirliyoruz.

Oluşturduğumuz elemana tıklayınca da beklediğimiz gibi “Deneme 1 2 3” mesajını konsolda görüyoruz.

Bir cevap yazın