young
(rtSwift)
1
// this works!
let x = #radians(45 - 45 + 18)
enum Foo: Double {
case north = #radians(45 - 45 + 18) // Raw value for enum case must be a literal
}
tera
2
Wouldn't it be easier for you to use a struct instead?
struct Direction: RawRepresentable {
var rawValue: Double
init(rawValue: Double) {
self.rawValue = rawValue
}
static let north = Direction(rawValue: 90*0)
static let east = Direction(rawValue: 90*1)
static let south = Direction(rawValue: 90*2)
static let west = Direction(rawValue: 90*3)
}
What are the benefits of enums that are important for you here? Exhaustiveness of switch statement? CaseIterable? (you could still do the latter with a struct).
idrougge
(Iggy Drougge)
3
Could it be that the macro does not return a FloatLiteralExprSyntax, but some other ExprSyntax?
young
(rtSwift)
4
The compiler doesn’t allow anything except a literal. Anything else is not allowed and is a compile error. So the macro is never called.
idrougge
(Iggy Drougge)
5
All right. One workaround might be to use a macro that outputs entire enum cases instead.