Stavo lavorando a un tutorial di Ray Wenderlich e ho notato che l'autore utilizza le estensioni di classe per contenere i callback delegati piuttosto che averli gestiti nella classe stessa, vale a dire:
delegare i callback all'interno della classe:
extension LogsViewController : UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
anziché essere contenuto nella classe:
delegare i callback all'interno della classe:
class LogsViewController : UITableViewController, UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
Ho trovato questo 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 ogni protocollo delegato: UITableViewDataSource, UISplitViewDelegate, ecc. Ad esempio:
più estensioni di classe ciascuna con delegazioni di callback all'interno del proprio file:
extension LogsViewController: UISplitViewControllerDelegate {
... callbacks
}
extension LogsViewController : UIPopoverPresentationControllerDelegate {
... callbacks
}
Perché?
Quali vantaggi ci sono per fare questo? Posso vedere dove potrebbe essere un po 'più leggibile separarlo ma allo stesso tempo è un livello di riferimento indiretto. Ci sono dei principi OO che sono di supporto o contro questo?