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

vii*_*rus 1 swift

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

枚举看起来像这样:

public enum SomeType: String {
    case one
    case two
    case three
}
Run Code Online (Sandbox Code Playgroud)

目前我做这样的比较:

model.field == SomeType.one.rawvalue

虽然这确实有效,但我宁愿不必raw value每次都添加.所以相反,我想能够写这个:

model.field == SomeType.one

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

Leo*_*Leo 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
}
Run Code Online (Sandbox Code Playgroud)