Bir Ray Wenderlich öğretici ile çalışıyordu ve yazar onları sınıfta yani ele alınması yerine delege geri çağırmaları tutmak için sınıf uzantıları kullandığını fark ettim:
sınıf uzantısı içindeki geri çağrılara temsilci seçme:
extension LogsViewController : UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
sınıf içinde yer almasının aksine:
sınıf içindeki geri çağrıları delege edin:
class LogsViewController : UITableViewController, UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
Bunu aynı zamanda garip ve ilginç buldum. Sadece "LogsViewControllerExtension.swift" adlı LogsViewController sınıfındaki uzantılara adanmış bir dosyaya sahiptir ve her delege protokolü için farklı bir uzantıya sahiptir: UITableViewDataSource, UISplitViewDelegate, vb.
her biri kendi dosyasındaki geri çağrıları temsil eden birden çok sınıf uzantısı:
extension LogsViewController: UISplitViewControllerDelegate {
... callbacks
}
extension LogsViewController : UIPopoverPresentationControllerDelegate {
... callbacks
}
Neden?
Bunu yapmanın ne gibi avantajları var? Bunu ayırmanın nereden daha okunaklı olabileceğini görebiliyorum ama aynı zamanda dolaylı bir seviyedir. Bunu destekleyen veya buna karşı çıkan OO ilkeleri var mı?