enum CardPosition: CGFloat {
case top = UIScreen.main.bounds.height //This line has the error "Raw value for enum case must be a literal"
case middle = 500
case bottom = 590
}
在最上面的情况下,我猜它不会返回CGFloat,但是由于某种原因,也不能使用“ as”关键字将其作为CGFloat进行类型转换,而且我也不知道为什么。知道怎么做吗?
答案 0 :(得分:1)
这是一个枚举,其原始值为CGFloat。
top
案例的问题在于,只有数字作为原始值是合法的。您不能分配诸如UIScreen.main.bounds.height
之类的变量。您必须在那儿写出一个实际数字。
从更长的角度来看,看起来您想要的不是枚举,或者不是采用原始值的枚举。例如,您可以拥有一个具有 associated 值的枚举:
enum CardPosition {
case top(CGFloat)
case middle(CGFloat)
case bottom(CGFloat)
}
现在您可以在初始化时附加值:
let myPosition = CardPosition.top(UIScreen.main.bounds.height)
let myOtherPosition = CardPosition.middle(500)
请注意,您无法混合搭配;如果我们要使用关联的值,则该枚举不能具有固定的原始值。