目标 C:比较两种无效的枚举类型

Nic*_*ard 0 c enums objective-c ios

我想检查两种枚举类型,但似乎不起作用。我有以下几点:

typedef enum {
    ZSSegmentTypeE,
    ZSSegmentTypeS,
    ZSSegmentTypeO,
    ZSSegmentTypeD,
    ZSSegmentTypeN
} ZSSegmentType;
Run Code Online (Sandbox Code Playgroud)

以下作品:

if (someSegmentType != ZSSegmentTypeN) {
    // Works
}
Run Code Online (Sandbox Code Playgroud)

以下不工作:

if (someSegmentType != ZSSegmentTypeN || someSegmentType != ZSSegmentTypeD) {
     // Does NOT work
}
Run Code Online (Sandbox Code Playgroud)

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

Dru*_*erB 5

德摩根定律告诉你,这:

someSegmentType != ZSSegmentTypeN || someSegmentType != ZSSegmentTypeD
Run Code Online (Sandbox Code Playgroud)

与此相同:

!(someSegmentType == ZSSegmentTypeN && someSegmentType == ZSSegmentTypeD)
Run Code Online (Sandbox Code Playgroud)

我敢肯定,你知道,someSegmentType不能同时ZSSegmentTypeN ZSSegmentTypeD在同一时间。因此,括号中的表达式将始终为假,整个语句为真。

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

someSegmentType != ZSSegmentTypeN && someSegmentType != ZSSegmentTypeD
Run Code Online (Sandbox Code Playgroud)