枚举中的类型转换在 Swift 中不起作用
Typecasting in enumeration not working in Swift
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
}
在最常见的情况下,我猜它不是 return CGFloat,但出于某种原因,使用“as”关键字也不能将其类型转换为 CGFloat,我不知道为什么。知道怎么做吗?
这是一个枚举,其原始值为 CGFloat。
top
案例的问题在于只有 文字数字 作为原始值是合法的。您不能分配像 UIScreen.main.bounds.height
这样的变量。你必须当场写出一个实际数字。
从长远来看,您在这里想要的可能不是枚举,或者可能不是采用原始值的枚举。例如,您可以拥有一个具有 关联 值的枚举:
enum CardPosition {
case top(CGFloat)
case middle(CGFloat)
case bottom(CGFloat)
}
现在您可以在初始化时附加值:
let myPosition = CardPosition.top(UIScreen.main.bounds.height)
let myOtherPosition = CardPosition.middle(500)
请注意,您不能混搭;如果我们要使用关联值,则此枚举不能具有固定的原始值。
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
}
在最常见的情况下,我猜它不是 return CGFloat,但出于某种原因,使用“as”关键字也不能将其类型转换为 CGFloat,我不知道为什么。知道怎么做吗?
这是一个枚举,其原始值为 CGFloat。
top
案例的问题在于只有 文字数字 作为原始值是合法的。您不能分配像 UIScreen.main.bounds.height
这样的变量。你必须当场写出一个实际数字。
从长远来看,您在这里想要的可能不是枚举,或者可能不是采用原始值的枚举。例如,您可以拥有一个具有 关联 值的枚举:
enum CardPosition {
case top(CGFloat)
case middle(CGFloat)
case bottom(CGFloat)
}
现在您可以在初始化时附加值:
let myPosition = CardPosition.top(UIScreen.main.bounds.height)
let myOtherPosition = CardPosition.middle(500)
请注意,您不能混搭;如果我们要使用关联值,则此枚举不能具有固定的原始值。