问题 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];

9881
2017-12-13 21:35


起源

目前还不是很清楚你想要什么。
我想定义一个调用具有必需参数的方法的宏 - aryaxt
尽管你可以很容易地做到这一点(请参阅@ dasblinkenlight的答案以获得一个非常简单的方法),但是日志记录问题有点复杂,并且有很好的预构建解决方案可以为您解决这个问题。看到 github.com/robbiehanson/CocoaLumberjack 一个很好的例子。 - Rob Napier


答案:


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

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

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

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

DLOG(@ “文字”);

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

void DLog(NSString *str) {
    [Logger logString:str withLogLevel:LogLevelDebug];
}

10
2017-12-13 21:39



__VA_ARGS__ 值得一提的是,恕我直言。