Les protocoles Objective-C imitant les «fonctions virtuelles» donnent-ils des avertissements au compilateur?

StackOverflow https://stackoverflow.com/questions/1435533

Question

En Objective-C, j'aimerais forcer les classes dérivées à implémenter une interface donnée sans fournir d'implémentation par défaut (une implémentation dans la classe parente).

Je comprends que les protocoles peuvent être utilisés pour cela, et je crois comprendre comment utiliser les protocoles, mais il me manque apparemment quelque chose ...

J'ai défini la classe Parent et dérivé de plusieurs classes Child. Toutes les classes enfants sont conformes à un protocole nécessitant la mise en oeuvre de myMethod.

J'aimerais parcourir les instances Child en y faisant référence via la super-classe Parent, en appelant myMethod à chaque fois.

Le compilateur - sans surprise - prévient que Parent peut ne pas répondre à myMethod.

Toutes les preuves suggèrent que myMethod sera en fait appelé pour chacune des instances dérivées de Child, mais le fait que je reçoive un avertissement me met mal à l'aise et laisse à penser que je ne l'applique pas correctement.

Qu'est-ce qui me manque?

Merci

Était-ce utile?

La solution

Ce n’est pas ainsi que les protocoles doivent être utilisés. Un protocole est une interface sans implémentation. Si une classe prétend se conformer à un protocole (comme votre classe parent le fait apparemment), elle doit implémenter les méthodes ou vous obtiendrez un avertissement. Ce que vous voulez faire est de faire en sorte que toutes les classes qui implémentent le protocole déclarent qu'elles s'y conforment et, au lieu de les référencer par ce nom de classe parent, appelez-les id<ProtocolNameHere>. Ceci déclare qu'il s'agit d'objets conformes à ce protocole.

Autres conseils

Je remarque beaucoup d’intérêt pour les protocoles et leur fonctionnement. Malheureusement, ils contiennent de nombreux tutoriels trompeurs.

Découvrez mon tutoriel Héritage ou Protocoles? sur le fonctionnement des protocoles et sur le moment de les utiliser à la place de l'héritage. De nombreux exemples de code sont inclus, ainsi qu'une discussion sur la façon dont les protocoles peuvent être utilisés plutôt que des catégories analogues à celles de la classe abstraite d'autres langues. Bonne chance pour votre développement!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top