2017-04-26 98 views
2

考虑:如何比较两个枚举实例与NO原始类型?

enum Example { case Step1 case Step2(data: String) } 

和:

let a: Example = .Step1 
let b: Example = .Step2(data: "hi") 

我如何使这项工作?

print(a == b) // ERROR: Binary operator '==' cannot be applied to two 'Example' operands 

请注意,我不能放弃自定义枚举(它不能包含原始值)

+0

http://stackoverflow.com/questions/31548855/how-to-compare-enum-with-associated-values-by-ignoring-its-associated-value-in-s也可能是有用的。 – rmaddy

回答

1

落实Equatable协议的枚举。

enum Example: Equatable { 
    case Step1 
    case Step2(data: String) 

    static func == (lhs: Example, rhs: Example) -> Bool { 
     switch(lhs) { 
     case Step1: 
      switch(rhs) { 
      case Step1: 
       return true 
      default: 
       return false 
      } 
     case Step2(data: leftString): 
      switch(rhs) { 
      case Step2(data: rightString): 
       return leftString == rightString 
      default: 
       return false 
      } 
     } 
    }  
} 
+0

这是唯一的解决方案吗?如果你有更多的2例,这似乎很难看! – Martin

+0

您可以使用'default',因此它可以根据案例数量而不是案例数量的平方。 –

+0

是的,我明白了。这是快速恕我直言,有点缺乏 – Martin