Réponses:
Depuis la page Apple sur " Protocoles formels ":
Les méthodes de protocole facultatives peuvent être marquées comme facultatives à l'aide du mot clé @optional. Correspondant au mot clé modal @optional, il existe un mot clé @required pour désigner formellement la sémantique du comportement par défaut. Vous pouvez utiliser @optional et @required pour partitionner votre protocole en sections comme bon vous semble. Si vous ne spécifiez aucun mot-clé, la valeur par défaut est @required.
@protocol MyProtocol
- (void)requiredMethod;
@optional
- (void)anOptionalMethod;
- (void)anotherOptionalMethod;
@required
- (void)anotherRequiredMethod;
@end
Si une méthode dans un protocole est marquée comme facultative, vous devez vérifier si un objet implémente cette méthode avant de tenter de l'appeler.
À titre d'exemple, la vue de graphique à secteurs peut tester la méthode du titre du segment comme ceci:
NSString *thisSegmentTitle;
if ([self.dataSource respondsToSelector:@selector(titleForSegmentAtIndex:)]) {
thisSegmentTitle = [self.dataSource titleForSegmentAtIndex:index];
}
La méthode respondsToSelector: utilise un sélecteur, qui fait référence à l'identifiant d'une méthode après compilation. Vous pouvez fournir l'identifiant correct en utilisant la directive @selector () et en spécifiant le nom de la méthode.
Si la source de données de cet exemple implémente la méthode, le titre est utilisé; sinon, le titre reste nul.
@protocol MyProtocol <NSObject>
Protocols est un ensemble de règles. Nous pouvons créer des protocoles comme l'exemple ci-dessous:
TestProtocols.h
@protocol TestProtocols <NSObject>
@optional
-(void)testMethodOptional;
@required // by default
-(void)testMethodRequired;
@end
La mise en oeuvre:
TestClass.h
#import "TestProtocols.h"
@interface TestClass : NSObject <TestProtocols>
@end
TestClass.m
#import "TestClass.h"
@implemenation TestClass
//optional to implement
-(void)testMethodOptional{
// Your Code
}
//required to implement
-(void)testMethodRequired{
// Your Code
}
@end
Utilisez le @optional
mot - clé avant la déclaration de votre méthode pour la rendre facultative. Aussi simple que cela!
// myProtocol.h
@protocol myProtocol
- (void)myMandatoryMethod:(id)someArgument;
@optional
- (void)myOptionalMethod:(id)someArgument;
@end
// myClass.m
@interface myClass : someSuperClass <myProtocol>
//...
@end
Les protocoles agissent de la même manière que les classes abstraites, de sorte que le mot clé @optional définit les méthodes facultatives pour l'implémentation.
Ainsi, dans le code, someMethod1, someMethod2 et someMethod4 sont des méthodes obligatoires (doivent être implémentées). someMethod3 est facultatif - si nous n'avons pas implémenté cette méthode, le compilateur ne lèvera aucun avertissement.
@protocol myPrtocol<NSObject>
-(void)someMethod1:(id)someArgument;
-(void)someMethod2:(id)someArugument;
@optional
-(void)someMethod3:(id)someArgument;
@required //by default
-(void)someMethod4:(id)someArgument;
@end
// sampleClass.m
@interface sampleClass : someSuperClass <myProtocol>
//...
@end