断言字符串参数不按预期工作

时间:2013-12-05 22:34:31

标签: objective-c assert

编辑:问题在于人们在下面指出的断言。谢谢你的帮助!

我有一个枚举设置,我正在尝试等同,但由于某种原因它不起作用。 它的声明如下:

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,条件也不会评估为真。

xcode enum asser image

有没有人对我做错了什么有任何建议或想法?

1 个答案:

答案 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
}