我正在解析文件中的字符串。其中一个字符串与颜色枚举中的名称具有相同的值。例如,枚举包含 Purple
,其中一个字符串可能是 "Purple"
。我知道有一种方法可以使用 rawValue
(等)根据其值选择枚举项,但是 name 是否有类似的东西?这是枚举...
enum Colors: Int {
case White = 0
case Red
case Orange
case Yellow
case Green
case Cyan
case Blue
case Purple
}
最佳答案
我同意您的枚举具有 Int 原始值的想法,但现在您想通过字符串查找案例。 (如果你知道你想按字符串查找案例,就很难理解为什么你不给你的枚举字符串原始值作为开始。但是,正如我所说,我会一起玩,只是为了好玩的。)
所以... 请记住,枚举与其他类型一样都是对象类型。因此你可以给它一个自定义方法!
所以你可以有一个从字符串数组开始的方法,例如["White", "Red", "Orange"...]
,使用find
查找字符串,从而为您提供一个索引号,并使用该索引号作为达到所需情况的原始值。
enum Colors: Int {
case White = 0
case Red
case Orange
case Yellow
case Green
case Cyan
case Blue
case Purple
static func byString(s:String) -> Colors? {
let arr = ["White", "Red", "Orange", "Yellow", "Green", "Cyan", "Blue", "Purple"]
let ix = find(arr, s)
if ix == nil {
return nil
}
return Colors(rawValue:ix!)
}
}
现在你可以这样说了:
let c = Colors.byString("Red")
关于Swift 枚举,将值设置为项目的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28929282/