Je travaillais sur un tutoriel Ray Wenderlich et j'ai remarqué que l'auteur utilise des extensions de classe pour contenir les rappels des délégués plutôt que de les faire gérer dans la classe elle-même, c'est-à-dire:
déléguer les rappels à l'intérieur de l'extension de classe:
extension LogsViewController : UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
au lieu de le faire figurer dans la classe:
déléguer les rappels à l'intérieur de la classe:
class LogsViewController : UITableViewController, UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
J'ai trouvé cela étrange et intéressant à la fois. Il a un fichier dédié uniquement aux extensions de la classe LogsViewController nommé "LogsViewControllerExtension.swift" et possède une extension différente pour chaque protocole de délégué: UITableViewDataSource, UISplitViewDelegate, etc. c'est-à-dire:
plusieurs extensions de classe chacune avec des rappels délégués dans son propre fichier:
extension LogsViewController: UISplitViewControllerDelegate {
... callbacks
}
extension LogsViewController : UIPopoverPresentationControllerDelegate {
... callbacks
}
Pourquoi?
Quels avantages y a-t-il à faire cela? Je peux voir où il pourrait être un peu plus lisible de séparer cela, mais en même temps, c'est un niveau d'indirection. Y a-t-il des principes OO qui sont favorables ou défavorables à cela?