2012-01-20 87 views
7

陣列枚舉 - 轉換成的NSArray

enum {MyA, MyB, Null}; 
typedef NSNumber myEnum; 

或者

typedef enum {MyA, MyB, Null} myEnum; 

1)如何創建一個數組

myEnum* myEnumTemp[] = {MyA, MyB}; 

只是給"Implicit conversion of 'int' to NSNumber* is disallowed with ARC(ref. counting)

2)如果你能夠創造te數組如何將其轉換爲NSArray

回答

15

嘗試做這樣:

typedef enum { MyA, MyB, Null } myEnum; 

然後,要創建一個數組,包裹數量爲NSNumber的S對象:

NSArray *a = [NSArray arrayWithObjects:[NSNumber numberWithInteger:MyA], 
             [NSNumber numberWithInteger:MyB], 
             nil]; 
+7

懶惰的人,你能做到這樣(需要的Xcode 4或更高版本):NSArray的* A = @ [@(MYA ),@(MYB)]; – Vinh

6

基本上,你需要用一個值NSNumber對象。

#define INT_OBJ(x) [NSNumber numberWithInt:x] 

[array addObject:INT_OBJ(MyA)]; 

,沒有什麼錯與其他數組,你只應該這樣定義它:

typedef enum {MyA, MyB, Null} myEnum; 

myEnum values[] = { MyA, MyB }; 

的問題是,你定義myEnum爲NSNumber,這不等於一個枚舉值(int)。

3

在的OBJ C:

enumArray = @[@(enum1),@(enum2)]; 

在斯威夫特:

enumArray = NSArray(objects: enum1.rawValue, enum2.rawValue);