【发布时间】:2016-03-17 21:01:20
【问题描述】:
与许多语言不同,Swift 的switch 必须是详尽无遗的,所以如果我有:
enum Enumeration
{
case A
case B
}
那么这段代码无效:
switch enumeration
{
case .A:
break
}
但是,这些是有效的:
switch enumeration
{
case .A:
break
case .B:
break
}
switch enumeration
{
case .A:
break
default:
break
}
如果我稍后将case C 添加到Enumeration,则第一个有效代码现在将产生编译器错误。第二个是有效的,因为它使用default:,它将捕获.C。
如果我遵守 semver 以获得 carthage(或 Swift 包管理器)支持,我必须为此增加主要版本吗?
对此的扩展扩展到了 Objective-C(隐含的 C)。由于 Swift 中支持 C 枚举作为 Swift 枚举,因此这也适用于打算在 Swift 中使用的 Objective-C 或 C 框架。我不确定如何解决这个问题,因为这些语言没有这样的限制(如果你的编译器很好,只是一个警告)。
【问题讨论】:
-
(我相信答案是“是”,但需要确认)
-
你不需要 default 因为 Swift 的类型推断。由于 Swift 可以推断出您的枚举类型,因此它知道您的枚举有两种情况,并且您的 Switch 确实是详尽无遗的。