Delegation
Swift dilinde, bir Design Pattern olan “Delegation” kavramını öğrenin.
Peki, delegate nedir?
“Delegate, belirli bir olay olduğunda bir nesnenin başka bir nesneye haber göndermesine olanak tanıyan bir Design Pattern’dır’.”
Bir A nesnesini hayal edin. Bir eylemi gerçekleştirmek için B nesnesini çağırır. Eylem tamamlandığında, A nesnesi B'nin görevi tamamladığını ve gerekli eylemi gerçekleştirdiğini bilmelidir. Bu işlem delegate’lerin yardımıyla gerçekleştirilebilir!
Sizlere bu olayı bir örnekle açıklayayım :
2 yaşınızda olduğunuzu hayal edin. Yemek yemeyi bu yaşta bilemezsiniz, bu yüzden annenizin yardımına ihtiyacınız vardır.
Yemek yapabilen bir anne oluşturmadan önce, annenin nasıl yemek pişirileceğini bilmesi gerekiyor.
protocol YemekPisirme {
func yemekYemek()
}
Şimdi, “YemekPisirme” protokolüne uyan bir anne yapısı oluşturalım:
struct Anne: YemekPisirme {
func yemekYemek() {
//Protokolümüzdeki fonksiyonumuza yazı ekledik.
print("Pizza geliyor!!")
}
}
Şimdi ise gerçek bir anne nesnesi oluşturalım:
// Anne Nesnesini Oluşturma
var anne = Anne()//Anne yapısını taşıyan anne değişkenini oluşturduk
anne.yemekYemek() // "Pizza geliyor!!"
Şimdi, 2 yaşında bir bebek oluşturma vakti. Ama onun birisinin yardımına ihtiyacı var, bu yüzden onun yerine yemek pişirebilecek bir yetişkin delegate) ekleyeceğiz.
// Bebek yapısı oluşturma
struct Bebek {
var delegate: YemekPisirme? // delegate = özel yetenekleri olan birisi
}
Şimdi, gerçek bir bebek nesnesi oluşturalım ve delegate’i anne olarak atayalım.
// Bebek nesnesi oluşturma
var babe = Bebek()
babe.delegate = anne
Temsilci(delegate) özelliğinin türü “YemekPisirme” dir. “Anne” tipi “YemekPisirme” protokolüne uygun olduğundan hem “YemekPisirme” hem de “Anne” olabilir.
Şimdi, bebeğimiz yemeğini yiyebilir:
babe.delegate?.yemekYemek() // "Pizza Geliyor!!"
Bebek yemek yapmayı bilmiyor. Ancak, kendisi için yemek yapabilecek isteğe bağlı olarak bir delegate ekledi. Daha sonra bu delegate’i, kendisinden daha çok şey yapabilen anne nesnesi olarak atadı.
Basit mi? Evet öyle. Bu kavramı açıklayan birçok blog okudum ve bunların çoğu çok karmaşık anlatıyordu. İyi bir makale yazdığımı düşünüyorsanız bunu yorumlar bölümünde belirtebilirsiniz. Umarım bu yazımı paylaşmaya değer bulmuşsunuzdur.
Örnek dosyayı https://github.com/erdemozgur/delegation adresinden indirebilirsiniz.
Swift Öğrenin. Uygulama Geliştirin. Sınırların Ötesine Geçin.
Hem kod yazmaya yeni başlayanların hem de profesyonellerin rahatlıkla takip edebilecekleri 40 saatlik videolu eğitim ile Swift programlama dilini derinlemesine keşfedin. Eğitim boyunca karşılaşacağınız problemleri birebir online görüşmelerde çözün.