让 __PRETTY_FUNCTION__ 只打印选择器的第一部分?

发布于 2024-11-04 03:07:25 字数 246 浏览 4 评论 0原文

有没有办法使 __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'
      */
}

Is there a way to make the __PRETTY_FUNCTION__ macro only resolve to the first part of an ObjC selector?

-(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'
      */
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

流星番茄 2024-11-11 03:07:25

然后您应该使用以下内容编辑该字符串:

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]); \
}

Then you should edit that string by using something like:

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

You could then make a macro out of it for easy usage (using _cmd gives better results, as noted by Ole)

#define __LOG_PRETTY_FUNCTION__ { \
    NSString *method = NSStringFromSelector(_cmd); \
    NSUInteger location = [method rangeOfString:@":"].location; \
    if(location == NSNotFound) NSLog(@"%@", method); \
    else NSLog(@"%@", [method substringToIndex:location]); \
}
小情绪 2024-11-11 03:07:25

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

No. But you could easily write your own macro that takes _cmd (one of the two hidden arguments passed to each method), converts it to a string with NSStringFromSelector() and parses the string to remove everything after and including the first colon it finds.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文