Passer un protocole en tant qu'argument de méthode
D'abord laissez-moi vous expliquer ce que je ne veux pas dire. Je ne veux pas le type d'un argument à un protocole:
-(void)someMethod:(id<SomeProtocol>)someArgument;
Ce que je veux, c'est passer d'un protocole à une méthode de la même manière, je peux passer d'une Classe à une méthode (Le suivant est incorrect, mais je l'espère explique ce que je veux faire):
-(void)someMethod:(Protocol)someArgument;
Je voudrais ensuite pouvoir utiliser le Protocole pour vérifier si un ensemble d'objets de la mettre en œuvre.
source d'informationauteur Undistraction | 2011-09-20
Vous devez vous connecter pour publier un commentaire.
Si vous connaissez le nom d'un protocole de codage-temps, l'utilisation
@protocol(SomeProtocol)
pour obtenir un pointeur vers ce protocole, semblable à la façon dont vous devriez utiliser@selector(x)
.Au-delà de cela, il suffit d'appuyer sur des protocoles avec l'identificateur de classe
Protocol
- de sorte que vous êtes à la déclaration de la méthode ressemblerait à:Vous pouvez voir un exemple dans la doc de
NSObject conformsToProtocol:
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/clm/NSObject/conformsToProtocol:
Est un protocole de la classe, de sorte que vous venez d'écrire
- (void)someMethod:(Protocol *)someArgument
comme avec tout autre type d'objet. Vous pouvez les voir dans la déclaration deconformsToProtocol:
:Je ne recommandent pas l'utilisation de protocole. Il va obscurcir l'interface de votre code s'appuie sur. Utilisation
id<yourprotocol>*
. C'est en fait la façon dont le cacao cadres de passe protocoles. Pardonner à l'utilisation de mots si je n'ai pas pense que je suis en train de faire HTML.