检测选择器的签名

Egi*_*gil 5 objective-c

如何检查选择器的签名,或者选择器是否需要参数?

例如,我想检查选择器是否是类型
-(void) method

-(void) method:(id)param

Jac*_*kin 8

您可以通过NSMethodSignature该类获取有关特定选择器的大量信息:

id obj = ...
SEL selector = ...

NSMethodSignature *signature = [obj methodSignatureForSelector:selector];
NSUInteger args = [signature numberOfArguments];
int i;
for(i = 0; i < args; i++)
   printf("argument type at index %d: %c", i, [signature getArgumentTypeAtIndex:i]);
Run Code Online (Sandbox Code Playgroud)


Jef*_*ffW 0

您可以使用 进行检查respondsToSelector:,即如下所示:

if ( [myObject respondsToSelector:@selector(doSomethingWithOneArgument:)] ){
    ....
}
Run Code Online (Sandbox Code Playgroud)