11
votes

Comment puis-je déclarer une propriété de classe en tant que type d'enum?

Je veux déclarer une énumération personnalisée telle que: xxx

comme type pour mon objet: xxx

mais je suis incertain d'où Je dois mettre la définition de l'énumé - si je le mettais avant le @interface son syntaxiquement incorrect


0 commentaires

3 Réponses :


10
votes

Si vous mettez vos deux extraits de code dans un fichier dans cette commande, il vous suffit d'ajouter un ; code> à la fin de la déclaration Enum et vous voudrez peut-être envisager d'utiliser une variable ENUM au lieu de Un pointeur à une variable d'énumération.

Ceci donne: P>

enum menuItemType
{
    LinkInternal = 0,
    LinkExternal = 1,
    Image = 2,
    Movie = 3,
    MapQuery = 4
};

@interface MenuItem : NSObject {    
    NSMutableString *menuId;
    NSMutableString *title;
    enum menuItemType menuType;
    NSMutableArray *subMenuItems;
}


2 commentaires

Cette réponse est obsolète, utilisez moderne ns_enum . Regardez @zedenem Réponse


@ ProCa2.0 - Vous êtes correct, merci d'avoir souligné cela. En effet, tout Objective-C est sur le point d'être obsolète.



5
votes

@mouviciel a raison, mais je pensais que je vous ferais savoir que ce que vous voulez n'est pas une propriété de classe, quelque chose qui n'est pas pris en charge dans l'objectif-c. Une propriété de classe est en fait une propriété globale définie sur l'objet de classe. Ce que vous pensais était une propriété ancienne (définie sur une instance de la classe).

En outre, ce que votre code montre que vous utilisez simplement une variable d'instance. Les variables d'instance peuvent être transformées en propriétés en ajoutant des méthodes d'accesseur / mutateur comme suit: xxx

et xxx

c'est un Raccourci: le compilateur générera les méthodes appropriées pour accéder et modifier la propriété menuType . Je ne suis pas sûr à quel point tout cela est utile, mais cela vous aidera à comprendre votre sémantique de l'objectif-C.


0 commentaires

16
votes

Juste à la mise à jour de cela au cas où quelqu'un trébuche à ce sujet dans notre temps futur.

Depuis iOS 6 code> / Mac OS X 10.8 Code>, le nouveau ns_enum et ns_options code> Les macros sont le moyen préféré de déclarer des types énumants. P>

Dans ce cas, il ressemblerait à: P>

typedef NS_ENUM(NSInteger, MenuItemType) {
    MenuItemTypeLinkInternal = 0,
    MenuItemTypeLinkExternal = 1,
    MenuItemTypeImage = 2,
    MenuItemTypeMovie = 3,
    MenuItemTypeMapQuery = 4
};


1 commentaires

Était sur le point de vous berlever pour avoir heurté un poste si vieux ... mais sérieusement, c'est génial. Je viens de convertir mon projet actuel. Aimez aussi les ns_options.