【问题标题】:How can I add raw values for an enum that doesn't have it?如何为没有它的枚举添加原始值?
【发布时间】:2016-10-26 12:20:01
【问题描述】:

给定一个我无法更改的外部枚举:

enum MyEnum {
  case first
  case second
}

我怎样才能最好地使这个 RawRepresentable,或者至少可以转换为 Int(或 String)?

我可以编写一个扩展来模仿 rawValue,但这感觉相当笨拙:

extension MyEnum {

    enum EnumError: Error {
        case invalidValue
    }

    init (rawValue: Int) throws {
        switch rawValue {
        case 0:
            self = .first
        case 1:
            self = .second
        default:
            throw EnumError.invalidValue
        }
    }

    var rawValue: Int {
        switch self {
        case .first:
            return 0
        case .second:
            return 1
        }
    }
}

有什么更好的方法?

【问题讨论】:

  • 你能说出你想用这个枚举做什么吗?可能是XY-problem
  • 将值存储在 NSUserDefaults 中。如果您拥有它,您可以将其键入为 Int 或向其添加原始/关联值。也许这就是你所说的XY。我可以只存储枚举并将其读取为 AnyObject 并进行转换吗?
  • 这篇文章可能不是你的问题的答案,但我建议这篇文章使用枚举更高级的方式和许多示例检查它appventure.me/2015/10/17/advanced-practical-enum-examples@FelixSFD 感谢您的建议:)

标签: swift enums


【解决方案1】:

这行得通:

enum MyEnum {
    case first
    case second
}

extension MyEnum {
    enum MyExtendedEnum:Int {
        case first
        case second
    }
}

无论如何,它的代码更简洁,您现在可以调用:

let myVar = MyEnum.MyExtendedEnum.RawValue()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多