检查整个枚举的相等性?

时间:2012-12-24 16:02:00

标签: objective-c ios macos cocoa enums

我有一个国际象棋益智游戏。

我想在枚举中设置错误的方块。

enum 1000H1wrong {11, 13, 15 21, 22};

我可以查看一个号码是否在整个枚举1000H1中。

if chesssquare == enum 1000H1wrong {        }

与此相同:

if ((chesssquare == 11) || (chesssquare == 13) || (chesssquare == 15)    || (chesssquare == 21) || (chesssquare == 22)) {      }

2 个答案:

答案 0 :(得分:4)

请改用NSArray。为了检查它是否包含数字:

NSArray *1000H1wrong = [NSArray arrayWithObjects: @11, @13, @15 @21, @22, nil];
[1000H1wrong containsObject: @(chesssquare) ];

答案 1 :(得分:0)

没有自动方法来检查一系列枚举值的成员资格。你可以像giorasch推荐的那样将它们放入NSSet中。但我的偏好是使用直C阵列:

static int squares1001H1wrong[] = {11, 13, 15, 21, 22};

#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))

static BOOL isInSquares1001H1wrong(int square)
{
    for (int i = 0; i < ARRAY_SIZE(squares1001H1wrong); ++i)
        if (squares1001H1wrong[i] == square)
            return YES;
    return NO;
}

数组是在编译时构造的,而不是运行时。没有构造对象。测试是在没有单个方法调用的情况下进行的。

Objective-C是C语言的超集。学习C以获得Objective-C的全部功能。有关避免使用NSDictionary元素的NSArray的示例,请参阅Objective-C Is Still C (Not Java!)