associated valueを持つenumをシュッと比較できなくて困る時があります。一瞬だけSwiftの仕様が悪いような気がしますが、associated valueがEquatableでない可能性もあるので仕方がないことです。

enum SomeEnum {
    case a
    case b(Int)
}

SomeEnum.a == SomeEnum.a       // コンパイルエラー
SomeEnum.a == SomeEnum.b(1)    // コンパイルエラー
SomeEnum.b(1) == SomeEnum.b(1) // コンパイルエラー
SomeEnum.b(1) == SomeEnum.b(2) // コンパイルエラー

WWDC 2015では“Value types should implement Equatable”と言われているので、これに素直に従うと何事も上手くいきます。

enum SomeEnum: Equatable {
    case a
    case b(Int)

    static func ==(lhs: SomeEnum, rhs: SomeEnum) -> Bool {
        switch (lhs, rhs) {
        case (.a, .a):
            return true

        case (.b(let lhsValue), .b(let rhsValue)) where lhsValue == rhsValue:
            return true

        default:
            return false
        }
    }
}

SomeEnum.a == SomeEnum.a       // true
SomeEnum.a == SomeEnum.b(1)    // false
SomeEnum.b(1) == SomeEnum.b(1) // true
SomeEnum.b(1) == SomeEnum.b(2) // false