2009-07-30 6 views
4

Wenn nicht, und es muss in einer separaten Datei (zB MyEnums.h) enthalten sein, muss ich MyEnums.h jedes Mal importieren, wenn eine .m oder .h Datei auf den Typ oder einen der Werte verweisen möchte ?Kann eine Enumeration in derselben Datei definiert werden wie ein Klassenheader, der sie in Objective-C verwendet?


Hier ist Beispielcode von MyClass.h:

#import <Foundation/Foundation.h> 

// #1 placeholder 

@interface MyClass : NSObject { 
} 

// #2 placeholder 

- (void)sampleMethod:(MyEnum)useOfEnum; 

// #3 placeholder 

@end 

Hier ist die Enum ich zu definieren bin versucht:

typedef enum MyEnum { 
    Value1, 
    Value2 
} 

Wenn ich in # 1 meine Enumerationsdefinition versuchen Platzierung, Ich bekomme Fehler: kein Typ oder Speicherklasse kann hier vor 'Schnittstelle' angegeben werden.

Wenn ich meine Enumerationsdefinition versuchen Platzierung in # 2, erhalte ich Fehler:. Erwartete Kennung oder ‚(‘ vor dem ‚Ende‘

Wenn ich versuche, meine Enumerationsdefinition in # 3 platzieren, erhalte ich Fehler: erwartet ')' vor 'MyEnum'. Der sich über den Parameter "useOfEnum" beschwert, weil sein Typ noch nicht definiert ist.


Also kann dies getan werden? Oder was ist der beste Weg dies zu tun und die Anzahl der benötigten Imports zu begrenzen?

Antwort

5

Es sollte in Position # 1, arbeiten, aber ich glaube, Sie es wie so schreiben müssen:

typedef enum { 
    Value1, 
    Value2 
} MyEnum; 

richtig zu arbeiten.

Update: Ich habe dies bestätigt (zumindest in Xcode 3.2). Die oben gezeigte Syntax wird ohne Fehler kompiliert.

+0

Es funktioniert auch in Position 2 - oder irgendwo anders, bevor die Enum tatsächlich verwendet wird - aber es ist visuell schwieriger irgendwo außer Position 1. – Chuck

+0

@Chuck: Guter Punkt. Ich habe nicht einmal daran gedacht zu prüfen, ob es in den Positionen 2 und 3 funktionieren würde. Position # 1 ist der Weg zu gehen. –

+1

Danke für die Antwort, diesen Link: http://stackoverflow.com/questions/707512/typedef-enum-in-objective-c/707572#707572 erklärt, warum Sie es nach den geschweiften Klammern platzieren müssen. – Senseful

1

Es sieht so aus, als ob Sie einfach die vermissen; Ende der Deklaration typedef enum.