2017-04-26 105 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