Stavo lavorando attraverso un tutorial di Ray Wenderlich e ho notato che l'autore utilizza le estensioni di classe per contenere callback delegati anziché farli gestire nella classe stessa, ad esempio:
delegare callback all'interno dell'estensione di classe:
extension LogsViewController : UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
al contrario di averlo contenuto nella classe:
delegare callback all'interno della classe:
class LogsViewController : UITableViewController, UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
L'ho trovato strano e interessante allo stesso tempo. Ha un file dedicato solo alle estensioni della classe LogsViewController denominato "LogsViewControllerExtension.swift" e ha un'estensione diversa per ciascun protocollo delegato: UITableViewDataSource, UISplitViewDelegate, ecc.
più estensioni di classe ciascuna con callback delegati all'interno del proprio file:
extension LogsViewController: UISplitViewControllerDelegate {
... callbacks
}
extension LogsViewController : UIPopoverPresentationControllerDelegate {
... callbacks
}
Perché?
Quali vantaggi ci sono nel fare questo? Posso vedere dove potrebbe essere un po 'più leggibile separarlo ma allo stesso tempo è un livello di indiretta. Ci sono principi di OO che supportano o non fanno questo?