Estaba trabajando en un tutorial de Ray Wenderlich y noté que el autor usa extensiones de clase para retener las devoluciones de llamadas de los delegados en lugar de hacer que se manejen en la clase misma, es decir:
delegar devoluciones de llamada dentro de la extensión de clase:
extension LogsViewController : UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
en lugar de tenerlo dentro de la clase:
delegar devoluciones de llamada dentro de la clase:
class LogsViewController : UITableViewController, UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
Esto me pareció extraño e interesante al mismo tiempo. Tiene un archivo dedicado solo a extensiones en la clase LogsViewController llamado "LogsViewControllerExtension.swift" y tiene una extensión diferente para cada protocolo de delegado: UITableViewDataSource, UISplitViewDelegate, etc.
múltiples extensiones de clase cada una con devoluciones de llamada delegadas dentro de su propio archivo:
extension LogsViewController: UISplitViewControllerDelegate {
... callbacks
}
extension LogsViewController : UIPopoverPresentationControllerDelegate {
... callbacks
}
¿Por qué?
¿Qué ventajas hay para hacer esto? Puedo ver dónde podría ser un poco más legible separar esto, pero al mismo tiempo es un nivel de indirección. ¿Hay principios OO que apoyan o no lo hacen?