我想测试从一种状态到另一种状态的过渡。我在这样的枚举中定义了状态:

enum FingerStatus {
FINGERS_UP,
MOVING,
FINGERS_STILL
};


我有一个“ currentState”和一个“ newState”变量。我知道枚举只是整数,如果它们是16位整数(我认为是整数),则可以将两个枚举表示为单个32位整数。

我觉得我应该能够按照

switch ({currentStatus, newFingerStatus}) {
    case {FINGERS_STILL, MOVING}:
        NSLog(@"fingers starting to move");
        break;
    case {MOVING, FINGERS_STILL}:
        NSLog(@"fingers stopped moving");
        break;
    default:
        break;
}


我意识到语法是错误的,但是我认为基本思想是正确的。还有另一种干净的方法吗?

最佳答案

如果可以保证您的枚举小于16位,则可以使用:

switch ((currentStatus<<16) + newFingerStatus) {
    case (FINGERS_STILL<<16) + MOVING:
        NSLog(@"fingers starting to move");
        break;
    case (MOVING<<16) + FINGERS_STILL:
        NSLog(@"fingers stopped moving");
        break;
    default:
        break;
}

关于c - 比较(目标)C中的枚举数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3847931/

10-10 00:07