枚举中的类型转换在 Swift 中不起作用
Posted
技术标签:
【中文标题】枚举中的类型转换在 Swift 中不起作用【英文标题】:Typecasting in enumeration not working in Swift 【发布时间】:2020-07-03 00:58:02 【问题描述】: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】:这是一个枚举,其原始值是 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)
注意不能混搭;如果我们要使用关联值,那么这个枚举不能有一个固定的原始值。
【讨论】:
如果所有位置在数学上都与 UIScreen.main.bounds.height 相关怎么办?那将返回的类型是什么?我可以将枚举类型更改为不是 CGFloat 而是 idk 它应该是什么 你看我的回答了吗?这与 CGFloat 无关。以上是关于枚举中的类型转换在 Swift 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
搜索栏在 swift 3 中不起作用。无法将类型 (_) -> Bool 的值转换为预期的参数类型 NSPredicate
为啥浮点数据类型在没有类型转换 4.7 的情况下在此代码中不起作用? [复制]
MailComposer didFinishWith 结果在 Swift 3.0 中不起作用