Swift枚举,将值设置为项目的名称?

时间:2015-03-08 17:03:58

标签: swift

我正在解析文件中的字符串。其中一个字符串与颜色枚举中的名称具有相同的值。例如,枚举包含Purple,其中一个字符串可能是"Purple"。我知道有一种方法可以使用rawValue(等)根据其值选择枚举项目,但名称是否有相似之处?这是枚举...

enum Colors: Int {
 case White = 0
 case Red
 case Orange
 case Yellow
 case Green
 case Cyan
 case Blue
 case Purple
}

1 个答案:

答案 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")