目标C:比较两个不起作用的枚举类型

时间:2012-10-11 23:11:35

标签: objective-c ios c enums

我想检查两个枚举类型,但它似乎不起作用。我有以下内容:

typedef enum {
    ZSSegmentTypeE,
    ZSSegmentTypeS,
    ZSSegmentTypeO,
    ZSSegmentTypeD,
    ZSSegmentTypeN
} ZSSegmentType;

以下作品:

if (someSegmentType != ZSSegmentTypeN) {
    // Works
}

以下不起作用:

if (someSegmentType != ZSSegmentTypeN || someSegmentType != ZSSegmentTypeD) {
     // Does NOT work
}

为什么这个第二个例子不起作用,我在测试两个不同的枚举?在理解枚举和比较的工作方式时我缺少什么?

2 个答案:

答案 0 :(得分:4)

De Morgan's law告诉你,这个:

someSegmentType != ZSSegmentTypeN || someSegmentType != ZSSegmentTypeD

与此相同:

!(someSegmentType == ZSSegmentTypeN && someSegmentType == ZSSegmentTypeD)

我确信你会意识到someSegmentType不能同时是ZSSegmentTypeN ZSSegmentTypeD。因此,括号中的表达式将始终为false,整个语句将为true。

你可能想测试的是变量不是这两个值。你这样做:

someSegmentType != ZSSegmentTypeN && someSegmentType != ZSSegmentTypeD

答案 1 :(得分:2)

假设您希望第二个if语句仅在someSegmentType不是这两个值时才成功,那么您需要&&,而不是||。