我有一些数组需要映射到枚举数组:
let planets = ["Earth", "Mars", "Venus"]
enum Planet {
case Earth
case Mars
case Venus
}
对数组进行审查(例如,我在转换前对其进行过滤)
现在,在我的映射函数中
func stringToPlanet(planetStr: String) -> Planet {
switch planetStr {
...
default:
return ???
}
}
我必须在默认部分返回一些内容,因此我有以下选项:
如果这是另一种语言,我会在这里知道它永远不会发生。你对这里最好的模式有什么看法?
答案 0 :(得分:2)
您可以使用fromRaw
功能
enum Planet : String {
case Earth = "Earth";
case Mars = "Mars";
case Venus = "Venus";
}
var f = Planet.fromRaw("Earth")
f == Planet.Earth // true
如果工厂名称无效,f
将设置为nil
答案 1 :(得分:0)
使编译器满意的另一种方法是断言失败:
func stringToPlanet(planetStr: String) -> Planet {
switch planetStr {
...
default:
assertionFailure("Wow, new planet")
}
}
这样您就不必使用原始值污染您的好枚举;)