gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 04:58:09 24 4
gpt4 key购买 nike

我有以下枚举。

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

但我收到以下错误。

Cannot find an initializer for type 'GeneratorOf' that accepts an argument list of type '(() -> _)'

是否有更简单、更好或更优雅的方法来做到这一点?

最佳答案

适用于 Swift 4.2 (Xcode 10) 及更高版本

有一个 CaseIterable 协议(protocol):

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 它包含的值。参见 this article .您必须定义一个数组来列出您拥有的所有值。另请查看 Frank Valbuena 在“How to get all enum values as an array”中的解决方案。

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

关于ios - 如何将所有枚举值作为数组获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32952248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com