I have this enum:
enum GestureDirection:UInt { case Up = 1 << 0 case Down = 1 << 1 case Left = 1 << 2 case Right = 1 << 3 }
But on every case I get error:
Raw value for enum case must be a literal
I dont get it.
Swift 1.2, Xcode 6.3.2
Raw values are for when every case in the enumeration is represented by a compile-time-set value. The are akin to constants, i.e. So, A has a fixed raw value of 0 , B of 1 etc set at compile time. They all have to be the same type (the type of the raw value is for the whole enum, not each individual case).
Raw values gives us the possibility to specify some behavior for every single case in the enumeration. First, we specify that in Directions every raw value is going to hold a String. After that, we store those messages directly into the Enum.
That's because 1 << 0
isn't a literal. You can use a binary literal which is a literal and is allowed there:
enum GestureDirection:UInt { case Up = 0b000 case Down = 0b001 case Left = 0b010 case Right = 0b100 }
Enums only support raw-value-literal
s which are either numeric-literal
(numbers) string-literal
(strings) or boolean-literal
(bool) per the language grammar.
Instead as a workaround and still give a good indication of what you're doing.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With