Saranjith
Saranjith

Reputation: 11547

Associated enum Type Implement CaseItratable

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

Upvotes: 4

Views: 68

Answers (2)

Sweeper
Sweeper

Reputation: 270770

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)
    }
}

Upvotes: 1

PGDev
PGDev

Reputation: 24341

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...
    }
}

Upvotes: 1

Related Questions