我正在解析文件中的字符串。其中一个字符串与颜色枚举中的名称具有相同的值。例如,枚举包含Purple
,其中一个字符串可能是"Purple"
。我知道有一种方法可以使用rawValue
(等)根据其值选择枚举项目,但名称是否有相似之处?这是枚举...
enum Colors: Int {
case White = 0
case Red
case Orange
case Yellow
case Green
case Cyan
case Blue
case Purple
}
答案 0 :(得分:3)
我会认为您的枚举具有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")