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?

cfischer
la source

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.

Nikolai Ruhe
la source
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