2014-09-26 61 views
2

我有一些阵,我需要映射到枚举的数组:如何映射对象在斯威夫特枚举未抛出异常

let planets = ["Earth", "Mars", "Venus"] 

enum Planet { 
    case Earth 
    case Mars 
    case Venus 
} 

阵列被审核(FE我做一个过滤器上之前,转换)现在

,在我的映射功能

func stringToPlanet(planetStr: String) -> Planet { 
    switch planetStr { 
    ... 
    default: 
     return ??? 
    } 
} 

我必须在默认的部分返回的东西,所以我有以下选择:

  • 添加一个“未知”行星来枚举(但我知道100%,我的枚举中的所有行星都是已知的)
  • Return Planet?并且没有默认的(最干净的,但是下一行我需要非可选的枚举,我将不得不使用展开来进行过滤。关于包装/展开性能怎么样?我有一个紧凑的循环来调用这个函数)。地球(功能以外令人满意的结果,但eew)

如果这将是另一种语言,我会抛在这里知道它永远不会发生。你对这里最好的模式有什么看法?

回答

0

另一种方法,使编译器开心就是断言失败:

func stringToPlanet(planetStr: String) -> Planet { 
    switch planetStr { 
    ... 
    default: 
    assertionFailure("Wow, new planet") 
    } 
} 

这样你不必污染你的漂亮的枚举与原始值;)