Swift Delegates vs Closure: Güçlü Programlama Seçenekleri
Swift programlama dili, iOS ve macOS uygulamaları geliştirmek için çok önemli bir araçtır. Uygulamalarınızın özelliklerini ve görevlerini yerine getirmeleri için, fonksiyonlarınızın nasıl çalışacağını belirlemek için iki seçenek vardır: Delegates ve Closures. Bu makalede, bu iki seçenek arasındaki farkları inceleyecek ve hangisinin uygulamanızda ne zaman kullanılabileceğini açıklayacağız.
Swift’te Delegates, bir nesneyi başka bir nesneyle iletişim kurmak için kullanılan bir tasarım desendir. Bir nesnenin başka bir nesneye bir görev yaptığını bildirmesi anlamına gelir. Buna göre, bir nesne, bir delegate protokolüne uymasını isteyebilir ve bu delegate protokolünü uygulayan diğer bir nesneye verilebilir. Bir nesne, delegate nesnesinin belirlediği yöntemleri çağırarak, bu nesnenin istediği şeyi yapmasını sağlayabilir.
protocol MyDelegate {
func doSomething()
}
class MyClass {
var delegate: MyDelegate?
func process() {
delegate?.doSomething()
}
}
class MyDelegateImpl: MyDelegate {
func doSomething() {
// do something here
}
}
let myClass = MyClass()
let myDelegateImpl = MyDelegateImpl()
myClass.delegate = myDelegateImpl
myClass.process()
Ayrıca, Swift Delegates, bir nesnenin diğer bir nesneye haber vermesi için kullanılabilir. Örneğin, bir nesne, bir view controller’a bir işlem tamamlandığında haber verebilir. Bunun için, view controller, bir delegate protokolüne uymalıdır ve bu delegate protokolünü kullanan bir nesne oluşturmalıdır.
protocol MyDelegate {
func processCompleted()
}
class MyViewController {
var delegate: MyDelegate?
func process() {
// do some processing
delegate?.processCompleted()
}
}
class MyDelegateImpl: MyDelegate {
func processCompleted() {
// do something here
}
}
let myViewController = MyViewController()
let myDelegateImpl = MyDelegateImpl()
myViewController.delegate = myDelegateImpl
myViewController.process()
Closure’lar, Swift’te geri çağırma işlevleri olarak da bilinir. Geri çağırma işlevi, bir fonksiyonun, fonksiyonunu çağıran kod parçacığının yürütülmesinden sonra çalıştırılmasını sağlayan bir fonksiyondur. Swift Closures, fonksiyonların aynı şekilde çalışmasını sağlamak için kullanılan, kod parçacıkları olarak da adlandırılır. Closures, bir fonksiyonun, parametre almasına gerek kalmadan, doğrudan bir değer döndürmesini sağlar.
let myClosure = { (param1: String, param2: Int) -> String in
// do something here
return "done"
}
let result = myClosure("hello", 5)
Swift Delegates ve Closures, yukarıda açıklanan özellikleriyle, uygulamanızda kullanabileceğiniz iki güçlü programlama seçeneğidir. Ancak, her ikisi de uygulamanızda ne zaman kullanılacağını bilmek önemlidir. Eğer bir nesnenin bir diğer nesneye haber vermesi gerekiyorsa, Delegates kullanılmalıdır. Ancak, eğer bir fonksiyonun bir değer döndürmesi gerekiyorsa, Closures kullanılmalıdır.
Swift Delegates ve Closures, uygulamanızda etkili ve etkili şekilde kullanılabilecek iki güçlü programlama seçeneğidir. Her ikisini de kullanarak, uygulamanızın performansını artırmak ve hataları azaltmak mümkündür.