Recherche…


Définition de protocole de base

Définir un nouveau protocole:

@protocol NewProtocol

- (void)protocolMethod:(id)argument;

- (id)anotherMethod;

@end

Méthodes optionnelles et obligatoires

Par défaut, toutes les méthodes déclarées dans un protocole sont obligatoires. Cela signifie que toute classe conforme à ce protocole doit implémenter ces méthodes.

Il est également possible de déclarer des méthodes optionnelles . Ces méthodes ne peuvent être implémentées que si nécessaire.

Vous marquez des méthodes facultatives avec la directive @optional .

@protocol NewProtocol
- (void)protocolMethod:(id)argument;
@optional
- (id)anotherMethod;
@end

Dans ce cas, seule une autre anotherMethod est marquée comme facultative; les méthodes sans la directive @optional sont supposées être obligatoires.

La directive @optional s'applique aux méthodes suivantes, jusqu'à la fin de la définition du protocole ou jusqu'à ce qu'une autre directive soit trouvée.

@protocol NewProtocol
- (void)protocolMethod:(id)argument;
@optional
- (id)anotherMethod;
- (void)andAnotherMethod:(id)argument;
@required
- (void)lastProtocolMethod;
@end

Ce dernier exemple définit un protocole avec deux méthodes facultatives et deux méthodes requises.

Conforme aux protocoles

La syntaxe suivante indique qu'une classe adopte un protocole, en utilisant des crochets.

@interface NewClass : NSObject <NewProtocol>
...
@end

Cela signifie que toute instance de NewClass répondra aux méthodes déclarées dans son interface mais fournira également une implémentation pour toutes les méthodes requises de NewProtocol .

Il est également possible pour une classe de se conformer à plusieurs protocoles en les séparant par une virgule.

@interface NewClass : NSObject <NewProtocol, AnotherProtocol, MyProtocol>
...
@end

Comme lorsque vous vous conformez à un seul protocole, la classe doit implémenter chaque méthode requise de chaque protocole et chaque méthode facultative que vous choisissez d'implémenter.

Déclarations avant

Il est possible de déclarer le nom du protocole sans méthodes:

@protocol Person;

utilisez votre code (définition de classe, etc.):

@interface World : NSObject
@property (strong, nonatomic) NSArray<id<some>> *employees;
@end

et plus tard définir la méthode du protocole quelque part dans votre code:

@protocol Person
- (NSString *)gender;
- (NSString *)name;
@end

C'est utile lorsque vous n'avez pas besoin de connaître les détails des protocoles avant d'importer ce fichier avec la définition du protocole. Ainsi, votre fichier d'en-tête de classe reste clair et contient uniquement les détails de la classe.

Vérification de l'existence d'implémentations de méthodes facultatives

if ([object respondsToSelector:@selector(someOptionalMethodInProtocol:)])
{
    [object someOptionalMethodInProtocol:argument];
}

Vérifiez que le protocole est conforme

Retourne un booléen indiquant si la classe est conforme au protocole:

[MyClass conformsToProtocol:@protocol(MyProtocol) ];



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow