如何获取所有枚举值作为数组
我有以下列举。
enum EstimateItemStatus: Printable { case Pending
case OnHold
case Done
var description: String {
switch self {
case .Pending: return "Pending"
case .OnHold: return "On Hold"
case .Done: return "Done"
}
}
init?(id : Int) {
switch id {
case 1:
self = .Pending
case 2:
self = .OnHold
case 3:
self = .Done
default:
return nil
}
}
}
我需要将所有原始值存储为字符串数组(例如["Pending", "On Hold", "Done"]
)。
我将此方法添加到枚举中。
func toArray() -> [String] { var n = 1
return Array(
GeneratorOf<EstimateItemStatus> {
return EstimateItemStatus(id: n++)!.description
}
)
}
但我收到以下错误。
找不到类型’GeneratorOf’的初始化程序,该初始化程序接受类型’(()-> _)’的参数列表
有没有更简单,更好或更优雅的方式来做到这一点?
回答:
对于Swift 4.2(Xcode 10)及更高版本
有一个CaseIterable
协议:
enum EstimateItemStatus: String, CaseIterable { case pending = "Pending"
case onHold = "OnHold"
case done = "Done"
init?(id : Int) {
switch id {
case 1: self = .pending
case 2: self = .onHold
case 3: self = .done
default: return nil
}
}
}
for value in EstimateItemStatus.allCases {
print(value)
}
对于Swift <4.2
不,您无法查询enum
包含的值。看到这篇文章。您必须定义一个列出所有值的数组。还可以在“如何以数组形式获取所有枚举值”中查看Frank Valbuena的解决方案。
enum EstimateItemStatus: String { case Pending = "Pending"
case OnHold = "OnHold"
case Done = "Done"
static let allValues = [Pending, OnHold, Done]
init?(id : Int) {
switch id {
case 1:
self = .Pending
case 2:
self = .OnHold
case 3:
self = .Done
default:
return nil
}
}
}
for value in EstimateItemStatus.allValues {
print(value)
}
以上是 如何获取所有枚举值作为数组 的全部内容, 来源链接: utcz.com/qa/427084.html