我有以下列举。
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"])。
["Pending", "On Hold", "Done"]
我将此方法添加到枚举中。
func toArray() -> [String] { var n = 1 return Array( GeneratorOf<EstimateItemStatus> { return EstimateItemStatus(id: n++)!.description } ) }
但我收到以下错误。
找不到类型’GeneratorOf’的初始化程序,该初始化程序接受类型’(()-> _)’的参数列表
有没有更简单,更好或更优雅的方式来做到这一点?
有一个CaseIterable协议:
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) }
不,您无法查询enum包含的值。看到这篇文章。您必须定义一个列出所有值的数组。还可以在“如何以数组形式获取所有枚举值”中查看Frank Valbuena的解决方案。
enum
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) }