Я работал над учебником Рэя Вендерлиха и заметил, что автор использует расширения класса для хранения обратных вызовов делегата, а не для обработки их в самом классе, то есть:
делегировать обратные вызовы внутри расширения класса:
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 и т. Д., Т.е.
несколько расширений классов каждый с делегатами обратных вызовов в своем собственном файле:
extension LogsViewController: UISplitViewControllerDelegate {
... callbacks
}
extension LogsViewController : UIPopoverPresentationControllerDelegate {
... callbacks
}
Почему?
Какие преимущества есть в этом? Я могу видеть, где это может быть немного более читабельным, чтобы отделить это, но в то же время это уровень косвенности. Существуют ли ОО-принципы, которые поддерживают или против этого?