En Objective-C, je peux ajouter des méthodes aux classes existantes, avec une catégorie, par exemple
@interface NSString (MyCategory)
- (BOOL) startsWith: (NSString*) prefix;
@end
Est-il également possible de le faire avec les protocoles, c'est à dire si il y avait un NSString protocole, quelque chose comme:
@interface <NSString> (MyCategory)
- (BOOL) startsWith: (NSString*) prefix;
@end
Je veux le faire depuis que j'ai plusieurs extensions de NSObject (la classe), en utilisant uniquement le public NSObject méthodes, et je veux que ces extensions également de travailler avec des objets de mise en œuvre du protocole .
Pour donner un autre exemple, si je veux écrire une méthode logDescription qui imprime un objet de la description dans le journal:
- (void) logDescription {
NSLog(@"%@", [self description]);
}
Je peux bien sûr ajouter cette méthode de NSObject, mais il y a d'autres classes qui n'héritent pas de NSObject, où j'aimerais aussi avoir cette méthode, par exemple NSProxy. Puisque la méthode utilise uniquement le public et les membres de protocole , il serait préférable de l'ajouter au protocole.
Edit: Java 8 est maintenant avec de "virtuel méthodes d'extension" dans les interfaces: http://cr.openjdk.java.net/~briangoetz/lambda/Défenseur%20Methods%20v4.pdf. C'est exactement ce que je voudrais faire en Objective-C. je n'ai pas vu cette question, gagnant beaucoup d'attention...
En ce qui concerne, Jochen