繁体   English   中英

声明一个ObjC参数,该参数是符合协议的Class

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM