Eu estava trabalhando em um tutorial de Ray Wenderlich e notei que o autor usa extensões de classe para reter delegados de retorno de chamada em vez de tê-los tratados na própria classe, ou seja:
delegar retornos de chamada dentro da extensão de classe:
extension LogsViewController : UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
em vez de contê-lo na classe:
delegar retornos de chamada dentro da classe:
class LogsViewController : UITableViewController, UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
Achei isso estranho e interessante ao mesmo tempo. Ele possui um arquivo dedicado apenas às extensões da classe LogsViewController denominada "LogsViewControllerExtension.swift" e possui uma extensão diferente para cada protocolo de delegado: UITableViewDataSource, UISplitViewDelegate, etc.
várias extensões de classe, cada uma com delegação de retorno de chamada em seu próprio arquivo:
extension LogsViewController: UISplitViewControllerDelegate {
... callbacks
}
extension LogsViewController : UIPopoverPresentationControllerDelegate {
... callbacks
}
Por quê?
Que vantagens existem para fazer isso? Eu posso ver onde pode ser um pouco mais legível separar isso, mas ao mesmo tempo é um nível de indireção. Existem princípios de OO que apoiam ou são contra isso?