如何获取所有枚举值作为数组

我有以下列举。

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

回到顶部