11

I want to define a macro to call the following, Is this possible? I also want it to accept format string.

- (void)logString:(NSString *)string withLogLogLevel:(LogLevel)logLevel
{
   // Sav log to file
}

DLog("text");
[Logger logString:text withLogLevel:LogLevelDebug];

ILog("text");
[Logger logString:text withLogLevel:LogLevelInfo];

ELog("text");
[Logger logString:text withLogLevel:LogLevelInfo];
4

1 に答える 1

10

ログレベルに加えて単一の文字列パラメータを取ると仮定するとlogString:withLogLevel:、これが可能になるはずです:

#define DLog(x) [Logger logString:(x) withLogLevel:LogLevelDebug]

マクロ パラメーターを囲む括弧に注意してください。マクロが複合式で呼び出される場合に便利です。

ロガーが C 文字列ではなくオブジェクトを取ると仮定すると、NSString次のようなマクロを使用する必要があります。

DLog(@"テキスト");

ただし、この場合、単純な関数呼び出しよりもマクロを好む理由が明確ではありません。

void DLog(NSString *str) {
    [Logger logString:str withLogLevel:LogLevelDebug];
}
于 2012-12-13T21:39:14.793 に答える