Я працював підручником Рея Вендерліха і зауважив, що автор використовує розширення класу, щоб утримувати зворотні делегатські виклики, а не обробляти їх у самому класі, тобто:
делегувати зворотні виклики всередині розширення класу:
extension LogsViewController : UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
на відміну від того, щоб він містився у класі:
делегувати зворотні виклики всередині класу:
class LogsViewController : UITableViewController, UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
Мені це здалося дивним і цікавим водночас. У нього є файл, призначений саме для розширень класу LogsViewController під назвою "LogsViewControllerExtension.swift" і має різне розширення для кожного протоколу делегата: UITableViewDataSource, UISplitViewDelegate тощо, тобто:
кілька розширень класу кожен w / делегувати зворотні дзвінки всередині власного файлу:
extension LogsViewController: UISplitViewControllerDelegate {
... callbacks
}
extension LogsViewController : UIPopoverPresentationControllerDelegate {
... callbacks
}
Чому?
Які переваги є для цього? Я можу побачити, де це може бути трохи легше читати, щоб розділити це, але в той же час це рівень непрямості. Чи існують принципи ОО, які підтримують чи проти цього?