【问题标题】:Find Argument Class / Type From Selector Variable - Objective-C从选择器变量中查找参数类/类型 - Objective-C
【发布时间】:2014-03-10 03:39:33
【问题描述】:

我正在研究一个涉及将选择器作为变量发送以供以后使用的类。选择器需要接受一个参数,一个 BOOL 值。执行如下:

IMP imp = [ob methodForSelector:selector];
void (*func)(id, SEL, BOOL) = (void *)imp;
func(ob, selector, YES);

如果有人尝试使用与 BOOL 不匹配的变量设置选择器,我想返回一个错误。有没有办法,当接收到选择器时,我可以检查它的参数是否为 BOOL,或者一般来说,传递了什么类或类型的参数?

为什么?

我正在我的一个班级中建立一个准通知中心,以便我可以轻松添加观察者并更好地控制信息分发。

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    看方法签名:

    NSMethodSignature * sig = [ob methodSignatureForSelector:selector];
    NSAssert(0 == strcmp(@encode(BOOL), [sig getArgumentTypeAtIndex:2]),
             @"Method must take a BOOL as its sole argument.");
    

    【讨论】:

    • 谢谢@Josh,效果很好!你介意展示一下我将如何为一个对象做这件事吗?
    • 只需将@encode() 中的BOOL 更改为id(或类名,但任何类名都将编码为与id 相同的内容)。
    • 对索引 2 的良好调用。我总是忘记将 self 和 _cmd 作为默认参数,直到我花了 10 分钟诅咒并关闭了我的显示器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多