Arbitur Arbitur - 1 month ago 83
Swift Question

Raw value for enum case must be a literal

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

Answer

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-literals 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.