swiftenumsassociated-value

Enumeration on enums with associated values - Swift


I have an enum with associated values. In addition, every value has a String description. How can I get description of all the cases?

enum MyEnum {

    case caseA(data: [DataOfTypeA])
    case caseB(data: [DataOfTypeB])
    case caseC(data: [DataOfTypeC])
    case caseD(data: [DataOfTypeD])

    var typeDescription: String {
        switch self {
        case .caseA:
            return "caseA"
        case .caseB:
            return "caseB"
        case .caseC:
            return "caseC"
        case .caseD:
            return "caseD"
        }
    }
}

The thing I am looking for is:

"caseA, caseB, caseC, caseD"

Solution

  • You can make your enum conform to CaseIterable, then simply iterate through allCases to create typeDescription.

    enum MyEnum: CaseIterable {
        case caseA(data: [Int])
        case caseB(data: [String])
        case caseC(data: [Date])
        case caseD(data: [Data])
    
        static var allCases: [MyEnum] = [.caseA(data: []), .caseB(data: []), .caseC(data: []), .caseD(data: [])]
    
        var caseDescription: String {
            switch self {
            case .caseA:
                return "caseA"
            case .caseB:
                return "caseB"
            case .caseC:
                return "caseC"
            case .caseD:
                return "caseD"
            }
        }
    
        static var typeDescription: String {
            return allCases.map {$0.caseDescription}.joined(separator: ", ")
        }
    }