Je ne pense pas fondamentalement comprendre ce qu'est un enum
, et à quel moment l'utiliser.
Par exemple:
typedef enum {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
Ce qui est vraiment d'être déclaré ici?
Je ne pense pas fondamentalement comprendre ce qu'est un enum
, et à quel moment l'utiliser.
Par exemple:
typedef enum {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
Ce qui est vraiment d'être déclaré ici?
Trois choses sont déclarés ici: un anonyme, un type énuméré est déclaré, ShapeType
est déclaré un typedef pour que l'énumération anonyme, et les trois noms kCircle
, kRectangle
, et kOblateSpheroid
sont déclarées comme faisant partie intégrante des constantes.
Nous allons casser vers le bas. Dans le cas le plus simple, une énumération peut être déclarée
enum tagname { ... };
Il déclare une énumération avec le tag tagname
. En C et Objective-C (mais pas en C++), toutes les références à cette doit être précédée de l' enum
mot-clé. Par exemple:
enum tagname x; // declare x of type 'enum tagname'
tagname x; // ERROR in C/Objective-C, OK in C++
Afin d'éviter d'avoir à utiliser l' enum
mot-clé partout, une définition de type peuvent être créés:
enum tagname { ... };
typedef enum tagname tagname; // declare 'tagname' as a typedef for 'enum tagname'
Cela peut être simplifiée en une seule ligne:
typedef enum tagname { ... } tagname; // declare both 'enum tagname' and 'tagname'
Et enfin, si nous n'avons pas besoin d'être en mesure d'utiliser enum tagname
avec l' enum
mot-clé, nous pouvons faire l' enum
anonyme et uniquement le déclarer à la définition de type nom:
typedef enum { ... } tagname;
Maintenant, dans ce cas, nous allons déclarer ShapeType
être un typedef ed nom d'une énumération anonyme. ShapeType
est vraiment juste un type intégral, et ne doit être utilisé pour déclarer des variables qui détiennent l'une des valeurs inscrites dans la déclaration (c'est l'une des kCircle
, kRectangle
, et kOblateSpheroid
). Vous pouvez attribuer un ShapeType
variable à une autre valeur par coulée, cependant, de sorte que vous devez être prudent lors de la lecture des valeurs enum.
Enfin, kCircle
, kRectangle
, et kOblateSpheroid
sont déclarées comme faisant partie intégrante des constantes dans l'espace de noms global. Depuis pas de valeurs spécifiques ont été spécifiées, elles sont attribuées aux nombres entiers consécutifs à partir de 0, alors kCircle
0, kRectangle
est de 1, et kOblateSpheroid
2.
Apple recommande de définir les énumérations comme ça depuis Xcode 4.4:
typedef enum ShapeType : NSUInteger {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
Ils fournissent aussi une pratique de la macro NS_ENUM:
typedef NS_ENUM(NSUInteger, ShapeType) {
kCircle,
kRectangle,
kOblateSpheroid
};
Ces définitions de donner plus de la vérification du type et de mieux la complétion de code. Je ne pouvais pas trouver une documentation officielle de NS_ENUM, mais vous pouvez regarder "Moderne Objective-C" de la vidéo à partir de la WWDC 2012 session ici.
Enum est défini par l'utilisateur type de données. TYPES DE DONNÉES ÉNUMÉRÉ Énumérés variables de type de données ne peut que supposer les valeurs qui ont été précédemment déclarée.
enum month { jan = 1, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec };
enum month this_month;
this_month = feb;
Dans la déclaration ci-dessus, mois est déclaré comme un énumérés type de données. Il se compose d'un ensemble de valeurs, de jan à déc. Numériquement, jan est donné la valeur 1, février la valeur 2, et ainsi de suite.
La variable this_month est déclaré du même type que mois, puis est affecté à la valeur associée à févr. This_month ne peut pas être affecté toutes les valeurs en dehors de ceux spécifiés dans la liste d'initialisation pour la déclaration de mois.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.