枚举中的类型转换在Swift中不起作用

时间:2020-07-03 00:58:02

标签: swift swiftui uikit enumeration

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进行类型转换,而且我也不知道为什么。知道怎么做吗?

1 个答案:

答案 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)

请注意,您无法混合搭配;如果我们要使用关联的值,则该枚举不能具有固定的原始值。