Test enum for equality in for ... where clause

Viewed 356

How can I test for enum equality when a case has an associated value? A contrived example:

enum Status : Equatable {
    case success
    case failed(error: String)

    static func == (lhs: Status, rhs: Status) -> Bool {
        switch (lhs, rhs) {
        case (.success, .success), (.failed, .failed):
            return true
        default:
            return false
        }
    }
}

let statuses = [
    Status.success,
    .failed(error: "error 1"),
    .failed(error: "error 2"),
    .success
]

// Failed: Binary operator '==' cannot be applied to operands of type 'Status' and '_'
for s in statuses where s == .failed {
    print(s)
}

(I know I can test for s != .success but the actual enum has more cases so they are a hassle)

1 Answers
Related