我有一个枚举设置,我正在尝试等同,但由于某种原因它不起作用。 它的声明如下:
typedef NS_ENUM(NSUInteger, ExUnitTypes) {
kuNilWorkUnit,
kuDistanceInMeters,
//end
kuUndefined
};
我在这里使用它:
+(NSString*) ExUnitDescription: (ExUnitTypes) exUnit
{
if (exUnit == kuNilWorkUnit)
{
assert("error with units");
}
///.... more stuff
}
Xcode没有触发我的断言。编辑:断言仅用于测试。我也使用过NSLog。即使值明显为kuNilWorkUnit,条件也不会评估为真。
有没有人对我做错了什么有任何建议或想法?
答案 0 :(得分:4)
你想这样做:
+(NSString*) ExUnitDescription: (ExUnitTypes) exUnit
{
assert(exUnit != kuNilWorkUnit);
///.... more stuff
}
这是因为assert
仅在您传递给它的表达式为false时停止执行。由于字符串文字总是非零,因此它永远不会停止执行。
现在,由于您使用的是Objective C,并且看起来您希望有一条与断言关联的消息,因此NSAssert会更受欢迎。
+(NSString*) ExUnitDescription: (ExUnitTypes) exUnit
{
NSAssert(exUnit != kuNilWorkUnit, @"error with units");
///.... more stuff
}