【问题标题】:Is there a preprocessor macro that expands to the current selector? [duplicate]是否有扩展为当前选择器的预处理器宏? [复制]
【发布时间】:2012-01-21 15:11:03
【问题描述】:

可能重复:
Dynamically retrieving current method's name
Obj-C introspection: How can a method reference it's own selector?

这适用于Objective-C,是否有预处理宏或其他东西来获取当前选择器的SEL值?具体来说,我正在寻找类似的东西:

-(void) someSelector
{
    SEL mySelector = __CURRENT_SELECTOR__;
    NSLog(@"I'm in selector %@",NSStringFromSelector(mySelector));
}

这有点像__FILE__ 宏,但这是为了获取当前选择器。将它传递给其他人非常有用,而不必担心如果选择器名称发生更改而对其进行更新。

【问题讨论】:

    标签: objective-c c-preprocessor predefined-macro


    【解决方案1】:

    每个方法都有两个隐式参数,self 是一个 id(接收者)和一个称为 _cmdSEL,这可能是你想要的。

    请注意,这与预处理器或编译时之前的任何内容无关,_cmd 不是宏,而是参数。

    -(void) someSelector
    {
        NSLog(@"I'm in selector %@",NSStringFromSelector(_cmd));
    }
    

    【讨论】:

      【解决方案2】:

      sidyll 所说的应该可以回答您的问题。只是想添加,如果你只是需要它来记录你也可以使用通常的 C 关键字,例如

      NSLog( @"%s" , __PRETTY_FUNCTION__ );
      

      【讨论】:

        【解决方案3】:
        NSLog( @"%s" , _cmd );
        

        _cmd 将为您提供当前选择器(仅在 Objective-c 中可用)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-01-04
          • 2010-12-03
          • 1970-01-01
          • 1970-01-01
          • 2020-10-18
          • 1970-01-01
          相关资源
          最近更新 更多