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];
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];
Une réponse moderne pourrait ressembler à ceci:
NSMutableArray *list =
[NSMutableArray arrayWithArray:@[@(green), @(red), @(blue)]];
et:
MyColors theGreenColor = ((NSInteger*)list[0]).intValue;
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.
NSMutableArray *corners = [[NSMutableArray alloc] initWithObjects:
@(Right),
@(Top),
@(Left),
@(Bottom), nil];
Corner cornerType = [corner[0] intValue];
Vous pouvez envelopper vos valeurs enum dans un objet NSNumber:
[NSNumber numberWithInt:green];
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];