2012-12-24 47 views
0

我有一個國際象棋益智遊戲。檢查整個枚舉的相等性?

我想在枚舉中設置錯誤的方塊。

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

我可以檢查一個數字是否在ENTIRE enum 1000H1wrong中。

if chesssquare == enum 1000H1wrong {  } 

與此相同的:

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

enum是一個C特性,據我所知,沒有爲您自動提供的有用運行時表示,可讓您執行此類操作。 – millimoose

+2

您不能有從數字開始的標識符。這是一個編譯錯誤 –

回答

4

使用的NSArray代替。爲了檢查它是否包含數字使用:

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

+1我寧願使用Set,但這肯定會工作 – giorashc

+0

是的,對於國際象棋棋盤,您可以將一個64元素集合作爲'uint64_t',然後使用普通的按位運算符來測試集合等等。 。 –

+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!)