web-dev-qa-db-fra.com

Comment stocker des valeurs enum dans un NSMutableArray

Mon problème est depuis qu'une énumération dans objective-c est essentiellement une valeur int, je ne suis pas en mesure de la stocker dans un NSMutableArray. Apparemment, NSMutableArray ne prendra aucun type de données c comme un int. 

Existe-t-il un moyen commun d'y parvenir?

typedef enum 
{
    green,
    blue,
    red

} MyColors;


NSMutableArray *list = [[NSMutableArray alloc] initWithObjects:
                             green,
                             blue,
                             red,
                             nil];

//Get enum value back out
MyColors greenColor = [list objectAtIndex:0];
32
Oysio

Enveloppez la valeur enum dans un NSNumber avant de la placer dans le tableau:

NSNumber *greenColor = [NSNumber numberWithInt:green];
NSNumber *redColor = [NSNumber numberWithInt:red];
NSNumber *blueColor = [NSNumber numberWithInt:blue];
NSMutableArray *list = [[NSMutableArray alloc] initWithObjects:
                             greenColor,
                             blueColor,
                             redColor,
                             nil];

Et récupérez-le comme ceci:

MyColors theGreenColor = [[list objectAtIndex:0] intValue];

61
indragie

Une réponse moderne pourrait ressembler à ceci:

NSMutableArray *list = 
 [NSMutableArray arrayWithArray:@[@(green), @(red), @(blue)]];

et:

MyColors theGreenColor = ((NSInteger*)list[0]).intValue;
19
Pat

La réponse de Macatomy est correcte. Mais au lieu de NSNumber, je vous suggérerais d’utiliser NSValue. C'est son but dans la vie.

10
nicktmro
NSMutableArray *corners = [[NSMutableArray alloc] initWithObjects:
                           @(Right), 
                           @(Top), 
                           @(Left), 
                           @(Bottom), nil];
Corner cornerType = [corner[0] intValue];
7
Tai Le

Vous pouvez envelopper vos valeurs enum dans un objet NSNumber: 

[NSNumber numberWithInt:green];
2
Thomas Zoechling

Aller avec NSNumber devrait être la bonne façon normalement. Dans certains cas, il peut être utile de les utiliser en tant que NSString. Dans ce cas, vous pouvez utiliser cette ligne de code:

[@(MyEnum) stringValue];
0
Alex Cio