Une catégorie peut-elle implémenter un protocole en Objective C?


88

J'ai une catégorie sur NSDate et ce serait pratique s'il pouvait implémenter un protocole que j'ai précédemment créé. Est-ce possible? quelle est la syntaxe correcte pour cela?

Réponses:


144

Oui, c'est possible. La syntaxe est:

@interface NSDate (CategoryName) <ProtocolName>
@end

@implementation NSDate (CategoryName)
@end

Voici la documentation d' Apple sur le sujet.

Il est également possible de le faire en utilisant une extension de classe. J'aime beaucoup cela pour me conformer en privé aux protocoles de délégation. Cela masque le détail de l'implémentation d'être un délégué d'une classe de l'interface publique et supprime la dépendance de l'en-tête.


Dommage qu'il n'y ait pas de moyen de déplacer la déclaration de protocole vers l'implémentation de la catégorie de classe.
adib

@adib C'est pour ça que les extensions de classe sont là.
Nikolai Ruhe

@ bikram990 Le document a été retiré et se trouve maintenant dans la section héritée. J'ai mis à jour le lien.
Nikolai Ruhe

malheureusement, nous ne pouvons pas déclarer les variables d'instance dans les catégories, dont nous pourrions avoir besoin pour certaines implémentations de protocole délégué
yasirmturk

@yasirmturk Vous pouvez le faire en utilisant objc_setAssociatedObject :)
animaonline
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.