不使用原始值将swift枚举与字符串进行比较

时间:2018-06-13 10:24:02

标签: swift

我有一些枚举,用于定义模型上特定属性的值(不会在整个代码中散布这些字符串)。由于模型存储在领域中,它们不能是这种枚举类型,而是字符串。

enum看起来像这样:

public enum SomeType: String {
    case one
    case two
    case three
}

目前我做这样的比较:

model.field == SomeType.one.rawvalue

虽然这确实有效,但我希望不必每次都添加raw value。所以我希望能够写下这个:

model.field == SomeType.one

有了这个,swift抱怨说它无法在类型==String上使用运算符SomeType。我已经尝试在SomeType枚举上添加一个自定义运算符,允许与String进行比较,但是swift似乎没有实际使用它并仍然给出相同的错误。是否有可能实现我想要的,或者出于某种原因迅速禁止它?

1 个答案:

答案 0 :(得分:6)

使用运算符重载:

public enum SomeType: String {
    case one = "1"
    case two = "2"
    case three = "3"
}

public func ==(left: SomeType, right: String) -> Bool {
    return left.rawValue == right
}

public func ==(left: String, right: SomeType) -> Bool {
    return right == left.rawValue
}