开发者

Declare an ObjC parameter that's a Class conforming to a protocol

In Objective-C, it is possible to pass a class as a parameter to a method:

- (void) m开发者_如何学JAVAethodThatTakesClass:(Class)theClass;

And it is possible to pass an instance that is conforming to a protocol as a parameter:

- (void) myConformInstance:(id <MyProtocol>)theObject;

Is it possible to use the combined functionality? A method which takes a class which is conforming to a certain protocol.


Yes. The following is a valid program which will log the NSObject class.

#import <Foundation/Foundation.h>
void f(Class <NSObject> c) {
    NSLog(@"%@",c);
}
int main() {
    f([NSObject class]);
}

This would cause a compiler error if you tried to pass a class which doesn't conform to NSObject, such as the Object class. You can also use it for methods.

- (void)printClass:(Class <NSObject>)c;


also valid:

@interface Something: Object {
}
 - (void) foo:(int(*)(void))bar;
@end

@implementation Something
- (void) foo:(int(*)(void))bar {
   return (*bar)();
}
@end

int someFunc( void ) {
    return 9;
}

int main ( int argc, char **argv ) {
    Something *object = [[Something alloc] init];

    printf( "%i\n", [object foo:&someFunc] );

    [object release];

    return 0; 
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜