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

标签 swift

我正在解析文件中的字符串。其中一个字符串与颜色枚举中的名称具有相同的值。例如,枚举包含 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/

相关文章:

ios - swift ,让我知道了这个 : interfaceOrientation was deprecated in iOS 8. 0

iOS 11 的 Refresh Controller 和 navigationBar 有 prefersLargeTitles 设置为 true 的问题

ios - 如何确保具有重复动画的 UITableView 标题单元格 subview 在 reloadData、用户滚动等之后继续动画?

ios - 如何将数据从弹出框内的 uicollectionview 中的按钮单击发送到主视图 Controller 中的表格单元格?

ios - 无法更改 iOS 代码中的 CollectionView 单元格大小

cocoa-touch - NSKeyedArchiver unarchiveObjectWithFile 因 EXC_BAD_INSTRUCTION 而崩溃

ios - 从 TextFields 获取 tableViewCell 的所有值

swift - 应用程序 :continueUserActivity:restorationHandler: is not getting called when using handoff

ios - UITabBarController 的 viewControllers 存在模态 Controller 问题

swift - 我所有的 UIAlertController 消息都变成了单行