【问题标题】:Get __PRETTY_FUNCTION__ to only print the first part of the selector?获取 __PRETTY_FUNCTION__ 只打印选择器的第一部分?
【发布时间】:2011-05-01 19:33:13
【问题描述】:

有没有办法让__PRETTY_FUNCTION__ 宏只解析为 ObjC 选择器的第一部分?

-(void)arg1:(int)a1 arg2:(int)a2 arg3:(int)a3 {
     printf("%s\n",__PRETTY_FUNCTION__);
     /* Prints 'arg1:arg2:arg3'
        I want it to print 'arg1'
      */
}

【问题讨论】:

    标签: objective-c macros selector


    【解决方案1】:

    然后你应该使用类似的东西来编辑那个字符串:

    NSString *method = [NSString stringWithFormat:@"%s", __PRETTY_FUNCTION__];
    [method substringToIndex:[method rangeOfString:@":"].location];
    

    然后,您可以从中创建一个宏以方便使用(使用 _cmd 可以获得更好的结果,如 Ole 所述)

    #define __LOG_PRETTY_FUNCTION__ { \
        NSString *method = NSStringFromSelector(_cmd); \
        NSUInteger location = [method rangeOfString:@":"].location; \
        if(location == NSNotFound) NSLog(@"%@", method); \
        else NSLog(@"%@", [method substringToIndex:location]); \
    }
    

    【讨论】:

      【解决方案2】:

      没有。但是您可以轻松编写自己的宏,该宏采用_cmd(传递给每个方法的两个隐藏参数之一),将其转换为带有NSStringFromSelector() 的字符串,并解析字符串以删除它找到的第一个冒号之后(包括第一个冒号)之后的所有内容.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-04
        • 2014-03-16
        • 2011-12-31
        • 2010-09-18
        • 1970-01-01
        • 1970-01-01
        • 2019-09-07
        相关资源
        最近更新 更多