Pracowałem przez samouczek Raya Wenderlicha i zauważyłem, że autor używa rozszerzeń klas do przechowywania wywołań zwrotnych delegatów zamiast obsługi ich w samej klasie, tj .:
delegować wywołania zwrotne wewnątrz rozszerzenia klasy:
extension LogsViewController : UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
w przeciwieństwie do umieszczenia go w klasie:
delegować wywołania zwrotne w klasie:
class LogsViewController : UITableViewController, UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
Uznałem to za dziwne i jednocześnie interesujące. Ma plik dedykowany tylko rozszerzeniom klasy LogsViewController o nazwie „LogsViewControllerExtension.swift” i ma inne rozszerzenie dla każdego protokołu delegowanego: UITableViewDataSource, UISplitViewDelegate itp. Tj .:
wiele rozszerzeń klas, każde z wywołaniami zwrotnymi delegatów wewnątrz własnego pliku:
extension LogsViewController: UISplitViewControllerDelegate {
... callbacks
}
extension LogsViewController : UIPopoverPresentationControllerDelegate {
... callbacks
}
Dlaczego?
Jakie są zalety tego działania? Widzę, gdzie może być trochę bardziej czytelne, aby to oddzielić, ale jednocześnie jest to poziom pośredni. Czy istnieją zasady OO, które wspierają lub nie robią tego?