Der Rohwert für den Enum-Fall muss ein Literal sein
Habe ich diese enum:
enum GestureDirection:UInt {
case Up = 1 << 0
case Down = 1 << 1
case Left = 1 << 2
case Right = 1 << 3
}
Aber auf jeden Fall bekomme ich Fehler:
Raw-Wert für enum Fall muss ein literal
Ich bekomme es nicht.
Swift 1.2, Xcode 6.3.2
InformationsquelleAutor der Frage Arbitur | 2015-05-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil
1 << 0
ist nicht eine wörtliche. Sie können eine binary literal ist ein literal und ist dort erlaubt:Enumerationen, die nur unterstützen
raw-value-literal
s, die entwedernumeric-literal
(zahlen)string-literal
(strings) oderboolean-literal
(bool) pro die Sprache Grammatik.Stattdessen als workaround und noch geben einen guten Hinweis darauf, was du tust.
InformationsquelleAutor der Antwort Benjamin Gruenbaum
Für Attribute, die sich nicht gegenseitig ausschließen, würde ich auch empfehlen
verwenden Sie eine
struct
basierend aufRawOptionSetType
@Vincent vorgeschlagen.Ein Vorteil ist, dass Sie alle bit-Operationen für die frei.
Hier ein voll funktionsfähiges Beispiel:
Verwendung:
Update für Swift 2: Als der Swift 2, kann dies einfacher getan
mit der neuen
OptionSetType
- Protokoll, das bietet-wieSchnittstelle (siehe auch die kürzlich hinzugefügten Antworten auf Wie erstellen NS_OPTIONS-Stil Bitmaske Aufzählungen in Swift?).
Wir haben nur zu definieren, die zugrunde liegenden Speicher-Typ und die vordefinierten Werte:
Verwendung:
InformationsquelleAutor der Antwort Martin R
Sie scheint zu wollen, dass eine bitweise Unterstützung für Ihre enums, aber wenn Sie für eine übersetzung von
NS_OPTIONS
Objective-C, Swift, das ist nicht dargestellt, durch eine Rasche Enum sondern einstruct
Erben vonRawOptionSetType
.Wenn Sie brauchen, Beispiel oder Anleitung, Sie können sich diese NSHipster Artikel
Dass getan werden könnte, mit so etwas wie dies :
Grüße,
InformationsquelleAutor der Antwort Vincent Saluzzo
Swift-2.2-Version :
In meinem Fall musste ich Konvertieren Sie die String-Enum-Werte verwendet werden, in der Lokalisierbare Zeichenfolgen. So hat diese Methode in meiner enum.
Und dann Verwenden Sie es wie so :
wo cellTitle übergeben wird, wird nur eine dieser CellTitle Enum-Werte
InformationsquelleAutor der Antwort ioopl