Associated enum Type Implement CaseItratable

Viewed 53

I have two enums and one associated enum. I need to get all the possible cases from enum A and enum B at once.

enum A {
    case a
    case b
    case c
}

enum B {
    case d
    case e
    case f
}

enum C {
    case first(A)
    case second(B)
}

extension C: CaseItratable {
 //How to implement?
}

Need a allCases method in enum C which returns all cases in enum A and all cases in enum B

2 Answers

1. Conform enum A and enum B to CaseIterable protocol

enum A: CaseIterable {
    case a, b, c
}

enum B: CaseIterable {
    case d, e, f
}

2. Get all cases of enum A and enum B using allCases.

enum C {
    case first(A)
    case second(B)

    var casesOfA: [A] {
        return A.allCases //here...
    }

    var casesOfB: [B] {
        return B.allCases //here...
    }
}

It's more helpful if A and B are CaseIterable as well, then you can implement CaseIterable in C like this:

extension A: CaseIterable {}
extension B: CaseIterable {}

extension C: CaseIterable {

    static var allCases: [C] {
        return A.allCases.map(C.first) + B.allCases.map(C.second)
    }
}
Related