[英]Declare an ObjC parameter that's a Class conforming to a protocol
在Objective-C中,可以将类作为参数传递给方法:
- (void) methodThatTakesClass:(Class)theClass;
并且可以将符合协议的实例作为参数传递:
- (void) myConformInstance:(id <MyProtocol>)theObject;
是否可以使用组合功能? 采用符合特定协议的类的方法。
是。 以下是一个有效的程序,它将记录NSObject类。
#import <Foundation/Foundation.h>
void f(Class <NSObject> c) {
NSLog(@"%@",c);
}
int main() {
f([NSObject class]);
}
如果您尝试传递不符合NSObject的类(例如Object
类),则会导致编译器错误。 您也可以将它用于方法。
- (void)printClass:(Class <NSObject>)c;
也有效:
@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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.