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
}
}
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