枚举中的类型转换在 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 的情况下在此代码中不起作用? [复制]

FFMPEG 转换的视频在 HTML5 中不起作用

MailComposer didFinishWith 结果在 Swift 3.0 中不起作用

Pandas 数据框类型 datetime64[ns] 在 Hive/Athena 中不起作用

第三节课总结