Передавать протокол как аргумент метода
Сначала позвольте мне объяснить, что я не имею в виду. Я не хочу вводить аргумент в протокол:
-(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.