Donc, j'ai cette définition:
typedef enum {
red = 1,
blue = 2,
white = 3
} car_colors;
Ensuite, j'ai une variable de type car_colors: car_colors mycar;
La question est que je reçois la couleur de la voiture dans une nstring. Ce doit être un nstring, je ne peux pas changer cela. Comment puis-je convertir de Nstring en type Car_Colors?
NSString *value = [[NSString alloc] initWithString:@"1"];
myCar = [value intValue]; // <-- doesn't work
une idée? Merci!
Plutôt que d'utiliser un tableau, pourquoi ne pas utiliser un dictionnaire; Vous avez la couleur nstring comme des clés et vous retournez tout ce que vous voulez. Quelque chose comme; (Long de la clarté).
NSDictionary *carColourDictionary = @{@"Red": @1,
@"Blue": @2,
@"White": @3};
// Use the dictionary to get the number
// Assume you have a method that returns the car colour as a string:
// - (NSString *)colourAsString;
int carColour = carColourDictionary[object colourAsString];
Vous pouvez également mettre les valeurs dans un tableau.
NSArray *carColorsArray = @[@"red", @"blue", @"white"];
Vous pouvez ensuite utiliser IndexOfObject pour obtenir l'index d'une chaîne particulière.
car_colors carColor = [carColorsArray indexOfObject:@"blue"] + 1;
Il y a beaucoup de bonnes réponses à cela ici: Conversion entre C Enum et XML
Ils sont fondamentalement identiques à ceux d'Abizern, mais sont un peu plus propres et plus faciles à travailler avec si votre application fait beaucoup de conversion à la chaîne à l'autre. Il existe des solutions qui maintiennent les définitions de chaîne et d'énumération ensemble et des moyens de faire la conversion une ligne de code unique et facile à lire.
// ...
typedef enum {
One = 0,
Two,
Three
} GFN;
// ...
#define kGFNPrefix @"GFNEnum_"
// ...
+ (NSString *)gfnToStr:(GFN)gfn {
return [NSString stringWithFormat:@"%@%d", kGFNPrefix, gfn];
}
+ (GFN)gfnFromStr:(NSString *)str {
NSString *gfnStr = [str stringByReplacingOccurrencesOfString:kGFNPrefix withString:@""];
return [gfnStr intValue];
}
// ...
Mon choix =)