2012-01-20 14 views
7

AvereArray di enumerazioni - convertire NSArray

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

O

typedef enum {MyA, MyB, Null} myEnum; 

1) Come si crea un allineamento

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

dà solo "Implicit conversion of 'int' to NSNumber* is disallowed with ARC(ref. counting)

2) Se sei in grado di creare un array come convertirlo in NSArray?

risposta

15

cerco di farlo in questo modo:

typedef enum { MyA, MyB, Null } myEnum; 

Quindi, per creare un array, avvolgere i numeri in NSNumber s oggetti:

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

per i più pigri si può fare in questo modo (richiede Xcode 4 o superiore): NSArray * a = @ [@ (Mya), @ (MYB)]; – Vinh

6

In sostanza, è necessario avvolgere il valore in un NSNumber oggetto.

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

[array addObject:INT_OBJ(MyA)]; 

E non c'era niente di sbagliato con l'altra matrice, è semplicemente dovuto definita in questo modo:

typedef enum {MyA, MyB, Null} myEnum; 

myEnum values[] = { MyA, MyB }; 

Il problema era che si è definito MyEnum come NSNumber, che non è uguale ad un valore enum (int).

3

In Obj C:

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

In Swift:

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