gpt4 book ai didi

objective-c - 如何确定@selector 是否需要参数?

转载 作者:太空狗 更新时间:2023-10-30 03:59:50 26 4
gpt4 key购买 nike

场景本身就是我有一个存储外部@selector 供以后使用的对象。按照设计,我希望能够添加两种选择器。简单的,没有参数,比如 [object add:@selector(doSomething)],而更复杂的,有一个参数,比如 [object add:@selector(doSomething:) ](注意冒号)。假设选择器存储在变量 SEL mySelector 中。

在执行过程中,我需要在 [anotherObject performSelector:mySelector][anotherObject performSelector:mySelector withObject:userInfo]] 之间做出选择。

我实现这个决定的方法是提供一个 BOOL 标志,该标志冗余地存储性能是否应该有或没有额外参数。然而,尽管我在文档中找不到它,但我觉得我也应该能够向选择器询问类似 -(BOOL)needsParameter 的内容。例如,我知道 UIGestureRecognizer 的 addTarget:action: 以某种方式自动进行了区分。

有人能给我指出正确的方向吗?

最佳答案

您可以为此使用 NSMethodSignature 类。例如,

SEL mySelector = …;

NSMethodSignature *msig = [anotherObject methodSignatureForSelector:mySelector];
if (msig != nil) {
NSUInteger nargs = [msig numberOfArguments];
if (nargs == 2) { // 0 non-hidden arguments
}
else if (nargs == 3) { // 1 non-hidden argument
}
else {
}
}

或者,您可以使用 NSStringFromSelector() 获取 mySelector 的字符串表示形式并计算冒号字符出现的次数。

关于objective-c - 如何确定@selector 是否需要参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4773955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com