Objective C - 定义宏来调用方法?

ary*_*axt 11 macros objective-c

我想定义一个宏来调用以下内容,这可能吗?我也希望它接受格式字符串.

- (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];
Run Code Online (Sandbox Code Playgroud)

das*_*ght 10

假设logString:withLogLevel:除了日志级别之外还需要一个字符串参数,这应该是可能的:

#define DLog(x) [Logger logString:(x) withLogLevel:LogLevelDebug]
Run Code Online (Sandbox Code Playgroud)

请注意宏参数周围的括号,在使用复合表达式调用宏时非常有用.

假设记录器采用NSString对象而不是C字符串,您应该像这样使用宏:

DLOG(@ "文字");

但是,在这种情况下,不清楚为什么人们更喜欢宏到简单的函数调用:

void DLog(NSString *str) {
    [Logger logString:str withLogLevel:LogLevelDebug];
}
Run Code Online (Sandbox Code Playgroud)

  • "__VA_ARGS__"值得一提,恕我直言. (2认同)