对具有关联值的枚举进行枚举 - Swift
Enumeration on enums with associated values - Swift
我有一个带有关联值的枚举。此外,每个值都有一个字符串描述。我怎样才能得到所有案例的描述?
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"
假设您有这个变量:
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)
您可以使 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 {[=10=].caseDescription}.joined(separator: ", ")
}
}
我有一个带有关联值的枚举。此外,每个值都有一个字符串描述。我怎样才能得到所有案例的描述?
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"
假设您有这个变量:
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)
您可以使 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 {[=10=].caseDescription}.joined(separator: ", ")
}
}