2010-11-17 15 views
4

Ce Java Code fonctionne:Objective-C: Comment vérifier si un protocole objet est une classe spéciale

public void executeCommand(ICommand cmd) { // ICommand is an Interface 
if (cmd.getClass().equals(LoginCommand.class)){ 

} 
} 

Mais cet objectif-C-Code ne fonctionne pas:

- (void)executeCommand: (id<Command>)cmd { // Command is a Protocol 
if ([cmd isKindOfClass:[LoginCommand class]]) { 
    // WARNING: '-conformsToProtocol:' not found in protocol 
} 
} 
+1

Je veux commenter que ces deux codes ne sont pas équivalents. votre premier code 'cmd.getClass(). est égal à (LoginCommand.class)' teste si l'objet est exactement cette classe; ce serait comme '[cmd isMemberOfClass: [LoginCommand class]]' dans Objective-C. D'autre part, '[cmd isKindOfClass: [LoginCommand class]]' teste si l'objet est cette classe ou une sous-classe, ce qui est comme 'cmd instanceof LoginCommand' en Java – user102008

Répondre

15

Lorsque vous déclarez votre protocole, dites à hériter du protocole NSObject comme ceci:

@protocol Command <NSObject> 
... 
@end 
référence

est here. NSObject est un protocole de base qui implémente -conformsToProtocol:.

+0

Cela fonctionne! Merci beaucoup!! :) – Manni

+0

pas de problème, heureux d'aider :) – kevboh