Цель-C: Как проверить, является ли объект протокола специальным классом - PullRequest
4 голосов
/ 17 ноября 2010

Этот Java-код работает:

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

 }
}

Но этот Objective-C-код не работает:

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

1 Ответ

15 голосов
/ 17 ноября 2010

Когда вы объявляете свой протокол, скажите ему наследовать от протокола NSObject следующим образом:

@protocol Command <NSObject>
...
@end

ссылка здесь . NSObject - это базовый протокол, который реализует -conformsToProtocol:.

...