【问题标题】:Checking equality of entire enum?检查整个枚举的相等性?
【发布时间】:2012-12-24 16:01:59
【问题描述】:

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

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

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

我可以检查一下 ENTIRE 枚举 1000H1 中是否有数字吗?

if chesssquare == enum 1000H1wrong {        }

和这个一样:

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

【问题讨论】:

  • enum 是 C 功能,据我所知,没有自动为您提供有用的运行时表示来让您执行此类操作。
  • 你不能有一个以数字开头的标识符。这是一个编译错误

标签: objective-c ios macos cocoa enums


【解决方案1】:

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

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

【讨论】:

  • 是的,对于棋盘,您只需将 64 个元素的集合实现为 uint64_t,然后使用普通的按位运算符来测试集合成员资格等。
  • 你不能有一个从数字开始的标识符。这是一个编译错误
  • 公平地说,对于使用国际象棋方块,两个整数听起来比 64 值枚举更容易表示。
  • 实际上它是为国际象棋拼图设计的...... Chezzles!如果您想看游戏,请查看 appbackr。但是非常感谢您的回答。欣赏它。这个网站很棒
【解决方案2】:

没有自动检查一系列枚举值的成员资格的方法。您可以按照 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!)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 2014-09-19
    • 2019-04-22
    相关资源
    最近更新 更多