Objective C >>有没有办法检查Selector返回值?

Oha*_*gev 3 objective-c return-value selector ios

假设我有一个可以分配给几种不同方法的选择器 - 每个方法都有不同的返回值.

有没有办法在调用"performSelector"之前检查选择器持有的方法的返回值是什么?

小智 8

有没有办法在调用"performSelector"之前检查选择器持有的方法的返回值是什么?

值?号码类型?邑.看来你想要方法的返回类型(或者你的问题没有意义).

Method m = class_getInstanceMethod([SomeClass class], @selector(foo:bar:));
char type[128];
method_getReturnType(m, type, sizeof(type));
Run Code Online (Sandbox Code Playgroud)

然后,您可以检查返回的类型字符串type.例如,"v"表示无效(谷歌完整列表).


nsg*_*ver 7

您可以使用Apple Docs中推荐的NSInvocation来实现此目的

这是一些使用NSInvocation的示例代码

    SEL selector = NSSelectorFromString(@"someSelector");
if ([someInstance respondsToSelector:selector]) {
    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:
                                [[someInstance class] instanceMethodSignatureForSelector:selector]];
    [invocation setSelector:selector];
    [invocation setTarget:someInstance];
    [invocation invoke];
    float returnValue;
    [invocation getReturnValue:&returnValue];
    NSLog(@"Returned %f", returnValue);
}
Run Code Online (Sandbox Code Playgroud)