1

我有两个在调用方法时记录的预处理器宏。一个宏只记录一个方法的名称;我用于 UITableViewDelegate 方法的另一个宏来记录方法的名称和参数的值indexPath(具有两个索引的 NSIndex*)。

#define LogMethodName  \
    { NSLog(@"%s", __PRETTY_FUNCTION__) ; }
#define LogMethodNameAndIndexPath  \
    { NSLog(@"%s  {%lu, %lu}", __PRETTY_FUNCTION__, [indexPath indexAtPosition:0] , [indexPath indexAtPosition:1] ) ; }

我怀疑这是否可能,但我想要一个宏来完成这两者的工作:当在有indexPath参数的方法中使用时,它会执行类似于 的代码LogMethodNameAndIndexPath,并且在缺少的方法中使用时indexPath参数(因此indexPath未定义),它会执行类似LogMethodName.

这可能吗?我已经查看了几十个 Stack Overflow 问题,但我还没有找到我能理解的答案。我已经尝试过下面看到的代码,但是 Xcode 不喜欢我indexPath在第 4 行中引用它,如果它之前没有定义,并且没有办法让 Xcode 保证我会要求它仅在indexPath定义时执行第 4 行。

#define LogMethodNameAndIndexPathWhenPresent {                                                                                                    \
    NSString* stringToLog = [NSString stringWithUTF8String:__PRETTY_FUNCTION__] ;                                                                 \
    if ( [stringToLog hasSuffix:@"AtIndexPath:]" )                                                                                                \
        stringToLog = [stringToLog stringByAppendingFormat:@"  {%lu, %lu}", [indexPath indexAtPosition:0] , [indexPath indexAtPosition:1] ] ;     \
    NSLog(@"%@", stringToLog) ;                                                                                                                   \
}
4

0 回答 0