J'ai essayé de saisir la programmation orientée-protocole, mais je ne comprends pas la différence entre les 2 scénarios suivants ...Différence entre le protocole adoptant + l'extension VS utilisant instance d'une classe
Scénario 1 J'ai deux classes UIViewControllers
. Ces deux classes doivent utiliser certaines fonctionnalités communes, donc je crée un protocole et une extension avec une implémentation par défaut du protocole, puis les contrôleurs de vue n'ont besoin que du protocole dans la ligne de classe et héritent automatiquement des fonctionnalités nécessaires. à-dire ...
protocol SomeProtocol {
func foo()
}
extension SomeProtocol {
func foo(){
//execute
}
}
class FirstViewController: UIViewController, SomeProtocol {
...
func doSomething(){
foo()
}
}
class SecondViewController: UIViewController, SomeProtocol {
...
func doSomethingElse(){
foo()
}
}
Scénario 2 J'ai deux classes qui sont UIViewControllers
. Ces deux classes doivent utiliser certaines fonctionnalités communes, donc je crée une classe de contrôleur et les deux classes UIViewController
utilisent une instance de la classe de contrôleur. c'est-à-dire ...
class FirstViewController: UIViewController {
...
let controller = Controller()
func doSomething(){
controller.foo()
}
}
class SecondViewController: UIViewController {
...
let controller = Controller()
func doSomethingElse(){
controller.foo()
}
}
class Controller {
func foo(){
//execute...
}
}`
Alors, quelle est la différence? Partout où j'ai besoin d'utiliser la fonction foo()
, je pourrais simplement saisir une instance de Controller()
. Quel avantage obtiens-je en mettant la fonction foo()
dans un protocole et en ayant les classes qui ont besoin de foo()
héritent du protocole?
La question posée semble avoir rien à voir avec la programmation orientée protocole ... – matt