如标题所示,如何定义自定义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__)