如标题所示,如何定义自定义NSAssert,其中将包括下面根据我的NSLog定义的行,类和格式:

#define NSLog(__FORMAT__, ...) NSLog((@"%@: " __FORMAT__), NSStringFromClass([self class]), ##__VA_ARGS__)

问题在于NSAssert在考虑其余参数之前首先具有BOOL值。如果不取出参数并将它们分开,我似乎找不到解决方案。

有没有更好的方法来解决这个问题?

长话短说,我正在寻找这样的东西:

#define DebugAssert(__VA_ARGS__[0], @"%@: %@", NSStringFromClass([self class]), __VA_ARGS__[1])

最佳答案

NSAssert宏的定义如下:

#define NSAssert(condition, desc, ...)  /* the implementation */


因此,条件已经是与格式字符串和变量参数列表分开的参数。进行与NSLog类似的操作应该没有问题:

#define MyAssert(condition, desc, ...) \
    NSAssert(condition, (@"%@: " desc), NSStringFromClass([self class]), ##__VA_ARGS__)

07-28 06:21