问题
What does this not work?
enum Aspect : CGFloat {
case Clockwise = 1.0
case Anticlockwise = -1.0
}
On Anticlockwise line I'm told that 'raw value for enum case must be a literal'
回答1:
That sounds like a bug. However it seems to work if you omit the decimal part:
enum Aspect : CGFloat {
case Clockwise = 1
case Anticlockwise = -1
}
回答2:
The weird thing is that a float with a minus is not a literal, but an expression. So the error message is correct.
From the Swift programming language:
Unlike with integer literals, negative floating-point numbers are expressed by applying the unary minus operator (-) to a floating-point literal, as in -42.0. The result is an expression, not a floating-point literal.
回答3:
This has been fixed in Swift 1.2 (Xcode 6.3 beta). From the release notes:
Negative floating-point literals are now accepted as raw values in enums.
So your code now compiles and works without problems, and you can now also define non-integral negative enumeration values, which was not possible before:
enum Aspect : CGFloat {
case Clockwise = 1.0
case Anticlockwise = -1.0
case Strange = -1.25
}
来源:https://stackoverflow.com/questions/27044476/swift-enum-raw-value-not-working-with-cgfloat-1-0