我有以下列举。
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 { return EstimateItemStatus(id: n++)!.description } ) } 但我收到以下错误。
无法找到类型'GeneratorOf'的初始化程序,该初始化程序接受类型'(()-> _)'的参数列表
我不知道如何解决这个问题。有什么帮助吗?或者,请告诉我是否有更简单/更好/更优雅的方式来做到这一点。
谢谢。 问题来源于stack overflow
对于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) }
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。