Vous ne pouvez pas le faire facilement. En C et Objective-C, les enums ne sont en fait que des constantes entières glorifiées. Vous devrez générer une table de noms vous-même (ou avec un abus du préprocesseur). Par exemple :
// In a header file
typedef enum FormatType {
JSON,
XML,
Atom,
RSS
} FormatType;
extern NSString * const FormatType_toString[];
// In a source file
// initialize arrays with explicit indices to make sure
// the string match the enums properly
NSString * const FormatType_toString[] = {
[JSON] = @"JSON",
[XML] = @"XML",
[Atom] = @"Atom",
[RSS] = @"RSS"
};
...
// To convert enum to string:
NSString *str = FormatType_toString[theEnumValue];
Le danger de cette approche est que si vous modifiez l'énumération, vous devez vous souvenir de modifier le tableau des noms. Vous pouvez résoudre ce problème en abusant du préprocesseur, mais c'est délicat et laid.
Notez également que cela suppose que vous avez une constante enum valide. Si vous avez une valeur entière provenant d'une source non fiable, vous devez en plus vérifier que votre constante est valide, par exemple en incluant une valeur "past max" dans votre enum, ou en vérifiant si elle est inférieure à la longueur du tableau, sizeof(FormatType_toString) / sizeof(FormatType_toString[0])
.
0 votes
Voir ma réponse à stackoverflow.com/questions/6331762/enum-values-to-nsstring-ios pour une solution plus propre à ce problème.
4 votes
On devrait peut-être faire un câlin à Swift langue sur l'enum.
0 votes
@craig : voici la solution github.com/ndpiparava/ObjcEnumString
0 votes
Pour une solution sans utiliser simplement un getter personnalisé pour enum qui convertit en chaîne de caractères, consultez string-cast macro array : stackoverflow.com/a/53755377/2057171