zum*_*zum 3 enums swift equatable
我有以下枚举:
enum Message: ErrorType {
case MessageWithInfo(info:String?)
case MessageDidFail
case MessageDidSend(info:String)
case InvalidMessageData
case MessageWithDelay(delay:Double)
.... will keep adding more
}
Run Code Online (Sandbox Code Playgroud)
我想弄清楚如何编写 Equatable 函数,然后让我比较 Message 枚举。
我发现了一些关于堆栈溢出的类似问题,但我找不到一个可以让我进行比较而不必打开每个案例的问题。
有没有办法编写一次 equatable 函数并让它工作,即使我不断向这个枚举添加更多案例?
不可能编写一个适用于各种情况的所有枚举的函数。这基本上就是你想要的。
原因在这里讨论。第二个答案显示了一种可以与具有 rawValue 的枚举一起使用的方法。
这是因为混合类型的 Enum 失去了它的 rawValue。
您可以编写一个开关来获取一个 rawValue(您必须忽略关联的值)。但这不能自动完成。
使用 Struct 或 Class,您也无法编写自动创建序列/集合的方法,该方法包含所有在其中声明的 var 的 let 。就像 Enum 不能从它的案例中创建一个序列/集合一样。
enum Message: ErrorType {
case MessageWithInfo(info:String?)
case MessageDidFail
case MessageDidSend(info:String)
case InvalidMessageData
case MessageWithDelay(delay:Double)
var rawValue : Int {
get {
switch self {
case .MessageWithInfo(info: _) : return 0
case .MessageDidFail : return 1
case .MessageDidSend(info: _) : return 2
case .InvalidMessageData : return 3
case .MessageWithDelay(delay: _) : return 4
}
}
}
}
func ==(lhs:Message,rhs:Message) -> Bool {
return (lhs.rawValue == rhs.rawValue)
}
Run Code Online (Sandbox Code Playgroud)