Передавать протокол как аргумент метода

Сначала позвольте мне объяснить, что я не имею в виду. Я не хочу вводить аргумент в протокол:

-(void)someMethod:(id<SomeProtocol>)someArgument;

Я хочу, чтобы передать протокол методу таким же образом, что я могу передать класс методу (следующее неверно, но, надеюсь, объясняет, что я хочу делать):

-(void)someMethod:(Protocol)someArgument;

Тогда мне хотелось бы использовать протокол, чтобы проверить, реализует ли его набор объектов.

Ответы

Ответ 1

Если вы знаете имя протокола во время кодирования, используйте @protocol(SomeProtocol), чтобы получить указатель на этот протокол, аналогично тому, как вы используете @selector(x).

Кроме того, вы просто ссылаетесь на протоколы с идентификатором класса Protocol - так вы декларируете метод:

-(void)someMethod:(Protocol*)someArgument

Вы можете увидеть пример в документах для NSObject conformsToProtocol:

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/clm/NSObject/conformsToProtocol:

Ответ 2

Протокол - это класс, поэтому вы просто пишете - (void)someMethod:(Protocol *)someArgument как с любым другим типом объекта. Вы можете увидеть это в объявлении для conformsToProtocol::

+ (BOOL)conformsToProtocol:(Protocol *)aProtocol

Ответ 3

Я не рекомендую использовать протокол. Это затмевает, на каком интерфейсе ваш код действительно опирается. Используйте id<yourprotocol>*. На самом деле это как cocoa frameworks протоколы. Простите использование слов, если я не думаю, что я пытаюсь сделать HTML.