Передать протокол в качестве аргумента метода - PullRequest
15 голосов
/ 21 сентября 2011

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

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

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

-(void)someMethod:(Protocol)someArgument;

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

Ответы [ 3 ]

16 голосов
/ 21 сентября 2011

Если вы знаете имя протокола во время кодирования, используйте @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:

3 голосов
/ 21 сентября 2011

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

+ (BOOL)conformsToProtocol:(Protocol *)aProtocol
1 голос
/ 25 июня 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...