Wie definiere und verwende ich ein ENUM in Objective-C?
Lesezeit: 5 Minuten
RexOnRoids
Ich habe eine Aufzählung in meiner Implementierungsdatei wie unten gezeigt deklariert und eine Variable dieses Typs in meiner Schnittstelle als PlayerState thePlayerState deklariert; und die Variable in meinen Methoden verwendet. Aber ich bekomme Fehlermeldungen, die besagen, dass es nicht deklariert ist. Wie deklariere und verwende ich eine Variable vom Typ PlayerState korrekt in meinen Methoden?:
Können Obj C Enums Mitgliedsvariablen haben, wie sie es in Java können? Wenn das so ist, wie?
– Uhrmacher
8. August 2014 um 15:42 Uhr
Also ist die zweite Lösung besser?
– Julian Onofrei
8. September 2014 um 12:21 Uhr
Die zweite Lösung ist besser (mit NS_ENUM), da es moderner ist und jetzt in Objective-C erforderlich ist, wenn Sie möchten, dass Ihre Aufzählung in Swift-Code verfügbar ist.
– Smileyborg
10. Januar 2015 um 4:10 Uhr
Aktualisiert, um zu zeigen, dass die zweite Lösung tatsächlich besser ist.
– rebelzach
29. Januar 2015 um 22:38 Uhr
In der Standardform von Apple wird der Typname für jeden Aufzählungswert wiederholt.
– ThomasW
9. Dezember 2015 um 6:42 Uhr
Dein typedef muss in der Header-Datei (oder einer anderen Datei, die #importin Ihren Header eingefügt), weil der Compiler sonst nicht weiß, welche Größe er machen soll PlayerState Ivar. Ansonsten sieht es für mich ok aus.
Die Option, es in einer separaten Datei abzulegen, erschien mir in meinem Fall richtig. Ich weiß nicht, ob dies ein guter Ansatz ist, aber ich musste dieselbe Aufzählung in zwei verschiedenen ViewControllern verwenden (selbst und sein Delegat/Datenquelle). Das Importieren des Headers des Delegaten/der Datenquelle führte zu einem Fehler und scheint für einen einfachen Bedarf zu viel zu sein. Also habe ich eine neue .h-Datei mit der deklarierten Aufzählung erstellt und sie in beide viewControllers.h-Dateien importiert. Lief wie am Schnürchen.
– Leandro Alves
8. Mai 2012 um 17:12 Uhr
Sollte empfehlen, das NS_ENUM-Makro zu verwenden – da dies die beste Vorgehensweise ist
– khebbie
25. Juli 2013 um 11:25 Uhr
Sie müssen Aufzählungen mit deklarieren NS_ENUM in Objective-C, wenn Sie möchten, dass Ihre Enum im Swift-Code verfügbar ist.
– Smileyborg
10. Januar 2015 um 4:08 Uhr
@DaveDeLong, ist das 2015 noch gültig? ich habe typedef erklärt in der .m Datei und es kompiliert und läuft gut.
– Julian Onofrei
14. April 2015 um 13:34 Uhr
@IulianOnofrei es würde in die .h-Datei gehen, wenn Sie die Aufzählung in anderen Dateien verwenden müssen. Wenn Sie es nur in einer Datei benötigen, war es immer völlig in Ordnung, es in die .m-Datei zu stecken.
Eine solche Antwort finden Sie in anderen SO-Fragen, aber als ich Aufzählungen durchgesehen habe, ist diese Frage zuerst aufgetaucht, also habe ich die Antwort auch hier hinzugefügt.
– Ben Flynn
3. April 2012 um 20:04 Uhr
Bei aktuellen Projekten möchten Sie vielleicht die verwenden NS_ENUM() oder NS_OPTIONS() Makros.
Hier ist ein Beispiel aus meinem eigenen Code mit NS_OPTIONS. Ich habe ein Dienstprogramm, das eine Unterebene (CALayer) auf der Ebene einer UIView festlegt, um einen Rahmen zu erstellen.
@implementation BSTCMBorderUtility
+ (void)setBorderOnView:(UIView *)view
border:(BSTCMBorder)border
width:(CGFloat)width
color:(UIColor *)color
{
// Make a left border on the view
if (border & BSTCMBOrderLeft) {
}
// Make a right border on the view
if (border & BSTCMBorderRight) {
}
// Etc
}
@end
Das hilft dem OP nicht wirklich weiter. Obwohl es technisch korrekt ist, sagt es ihnen nicht, wie man eine wiederverwendbare Aufzählung erstellt
– RyanR
27. Juni 2011 um 16:49 Uhr
Die Verlinkung auf developer.apple.com ist nicht wirklich hilfreich. Gibt es einen anderen Ort, den Sie stattdessen zitieren möchten?
– Brett
13. August 2012 um 2:16 Uhr
Kopieren / Einfügen der bereits vorhandenen Dokumentation, der Link, der die Hauptseite ist, hilft anderen wirklich nicht …
Jetzt ist der Typ der Aufzählung thePlayerState. Was wird aus playerStateTypes?
– Benutzer4951
11. Oktober 2012 um 10:07 Uhr
Informationen zu NS_ENUM und seiner neuesten modernen Syntax finden Sie im Beitrag NS_ENUM & NS_OPTIONS von Matt Thompson.
– Basilikum Bourque
22. Oktober 2013 um 0:06 Uhr