メソッドが呼び出されたときにログに記録する 2 つのプリプロセッサ マクロがあります。1 つのマクロは、メソッドの名前を記録するだけです。indexPathメソッドの名前と引数の値(2 つのインデックスを持つ NSIndex*)をログに記録するために UITableViewDelegate メソッドに使用するもう 1 つのマクロ。
#define LogMethodName \
{ NSLog(@"%s", __PRETTY_FUNCTION__) ; }
#define LogMethodNameAndIndexPath \
{ NSLog(@"%s {%lu, %lu}", __PRETTY_FUNCTION__, [indexPath indexAtPosition:0] , [indexPath indexAtPosition:1] ) ; }
可能かどうかは疑問ですが、1 つのマクロでこれら 2 つの作業をindexPath実行したいと思います。引数を持つメソッド内LogMethodNameAndIndexPathで使用すると、 と同様のコードが実行され、のようなコードを実行しindexPathます。indexPathLogMethodName
これは可能ですか?何十もの Stack Overflow の質問に目を通しましたが、理解できる答えが見つかりませんでした。以下に示すコードを試してみましたが、Xcode は、indexPath4 行目が定義されていない場合に参照することを好みません。また、4 行目が定義されている場合にのみ実行するよう Xcode に確認する方法もありませんindexPath。
#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) ; \
}