2010-01-22 7 views
11

ich eine benutzerdefinierte Enum wie erklären möchten:Wie kann ich eine Klasse Eigenschaft als Aufzählungstyp deklarieren

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

Als Typ für mein Objekt:

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

aber nicht sicher bin, wo ich muss ich die enum-definition setzen - wenn ich es vor der @ interface seine syntaktisch falsch

Antwort

10

Wenn Sie Ihre zwei Code-Snippets in einer Datei in dieser Reihenfolge, müssen Sie nur eine ; am Ende hinzufügen o f die enum-Deklaration und Sie sollten in Betracht ziehen, eine enum-Variable anstelle eines Zeigers auf eine enum-Variable zu verwenden.

Dies gibt:

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

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

danke Ich bin ein bisschen ein obj-c noob so schnell lernen danke –

+1

diese Antwort ist veraltet, verwenden Sie moderne 'NS_ENUM'. Schauen Sie sich an @Zedenem Antwort –

+0

@ Proca2.0 - Sie sind richtig, danke für das darauf hin. Tatsächlich ist alles, was Objective-C ist, auf dem Weg, veraltet zu sein. – mouviciel

5

@mouviciel richtig ist, aber ich dachte, dass ich Sie wissen lassen, dass Sie was Sie wollen, ist keine Klasseneigenschaft, etwas nicht in Objective-C unterstützt. Eine Klasseneigenschaft ist eigentlich eine globale Eigenschaft, die für das Klassenobjekt festgelegt ist. Was Sie dachten, war eine einfache alte Eigenschaft (auf eine Instanz der Klasse gesetzt).

Außerdem zeigt Ihr Code, dass Sie nur eine Instanzvariable verwenden. Instanzvariablen kann durch Zugabe von Accessor/Mutator-Methoden in die Eigentums gedreht werden, wie folgt:

// after @interface {} 
@property (readwrite) enum menuItemType menuType; 

und

// under @implementation 
@synthesize menuType; 

Dies ist eine Abkürzung der Compiler die richtigen Methoden erzeugen zuzugreifen und die menuType Eigenschaft ändern . Ich bin mir nicht sicher, wie nützlich das alles für Sie ist, aber es wird Ihnen beim Verständnis der Objective-C-Semantik helfen.

15

Nur aktualisieren, falls jemand in unseren zukünftigen Zeiten darauf stolpert.

Seit iOS 6/Mac OS X 10.8, die neuen NS_ENUM und NS_OPTIONS Makros sind die bevorzugte Art und Weise Aufzählungstypen zu erklären.

In diesem Fall würde es wie folgt aussehen:

typedef NS_ENUM(NSInteger, MenuItemType) { 
    LinkInternal = 0, 
    LinkExternal = 1, 
    Image = 2, 
    Movie = 3, 
    MapQuery = 4 
}; 

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

Ein gutes Buch zum Thema: http://nshipster.com/ns_enum-ns_options/

Sie auch für Enum Namensgebung Apples Konventionen entsprechen wollen könnte und gehen für so etwas wie:

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

Hoffe, das wird helfen.

+0

War im Begriff, dich zu beschimpfen, weil du einen Post, der so alt war, gestoßen hast ... aber ernsthaft, das ist großartig. Ich habe gerade mein aktuelles Projekt umgestellt. Liebe auch die NS_OPTIONS. – Fogmeister

Verwandte Themen