将协议作为方法参数传递

Und*_*ion 15 methods arguments protocols objective-c

首先让我解释一下我的意思.我不想为协议键入参数:

-(void)someMethod:(id<SomeProtocol>)someArgument;
Run Code Online (Sandbox Code Playgroud)

我想要的是将协议传递给方法,就像我可以将类传递给方法一样(以下是不正确的,但希望能解释我想要做的事情):

-(void)someMethod:(Protocol)someArgument;
Run Code Online (Sandbox Code Playgroud)

然后,我希望能够使用协议来检查一组对象是否实现它.

adp*_*mbo 17

如果您在编码时知道协议的名称,请使用@protocol(SomeProtocol)获取指向该协议的指针,类似于您的使用方式@selector(x).

除此之外,您只需使用类标识符引用协议Protocol- 因此您的方法声明将如下所示:

-(void)someMethod:(Protocol*)someArgument
Run Code Online (Sandbox Code Playgroud)

您可以在文档中查看示例 NSObject conformsToProtocol:

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

  • @ 1ndivisible:Protocol是一个类,就像NSString或NSArray一样.`Class`不是一个类,它是一个表示类的指针的类型,与`id`表示指向对象的指针非常相似. (4认同)