2015-08-11 4 views
2

Для перечислений со связанными значениями Swift не предоставляет оператор равенства. Таким образом, я реализовал один, чтобы иметь возможность сравнить два перечислений:Сравнить перечисления со связанными значениями в Swift

enum ExampleEnum{ 
    case Case1 
    case Case2(Int) 
    case Case3(String) 
    ... 
} 

func ==(lhs: ExampleEnum, rhs: ExampleEnum) -> Bool { 

    switch(lhs, rhs){ 
    case (.Case1, .Case1): return true 
    case let (.Case2(l), .Case2(r)): return l == r 
    case let (.Case3(l), .Case3(r)): return l == r 
    ... 
    default: return false 
    } 
} 

Моя проблема заключается в том, что у меня есть много таких перечислений с большим количеством случаев, поэтому мне нужно много писать этого сравнения кода (для каждого перечисление, для каждого случая).

Как вы можете видеть, этот код всегда следует той же схеме, поэтому представляется более абстрактным способом реализации поведения сравнения. Есть ли способ решить эту проблему? Например, с дженериками?

ответ

3

В настоящее время нет возможности достичь этого, не выписывая все случаи, мы можем надеяться, что это будет возможно в более поздней версии.

Если у вас действительно много случаев, и вы не хотите писать их все, вы можете написать небольшую функцию, которая автоматически генерирует код для вас (я делал это совсем недавно для чего-то, что wasn возможность репаратора)

Смежные вопросы