我有两个在调用方法时记录的预处理器宏。一个宏只记录一个方法的名称;我用于 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) ; \
}