Objective-C Language
Protocoles
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)
];