簡體   English   中英

枚舉具有關聯值的枚舉-Swift

[英]Enumeration on enums with associated values - Swift

我有一個帶有關聯值的枚舉。 此外,每個值都有一個String描述。 如何獲得所有情況的描述?

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

我正在尋找的是:

"caseA, caseB, caseC, caseD"

您可以使您的enum符合CaseIterable ,然后簡單地遍歷allCases來創建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: ", ")
    }
}

假設您有以下變量:

let myEnum = MyEnum.caseA(data: [])

用於訪問關聯值:

switch myEnum {
case .caseA(let data): print(data)
case .caseB(let data): print(data)
case .caseC(let data): print(data)
case .caseD(let data): print(data)
}

用於訪問typeDescription

print(myEnum.typeDescription)

或在沒有變量的情況

print(MyEnum.caseA(data: []).typeDescription)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM