彻底的开关

时间:2014-12-01 00:11:21

标签: c# swift switch-statement

我最近开始学习Swift并遇到了一个Swift开关,例如,在Swift中,开关似乎必须详尽无遗。

这将导致编译器错误

let nums = 1...5
for num in nums 
{
    switch num
    {
       case 2:
           // Do Something
       // Will throw a comilation error unless default: was added
    }
}

在C#中,这是完全可以接受的

var nums = new[] {1, 2, 3, 4, 5};
foreach (var num in nums)
{
    switch (num)
    {
        case 2:
            // Do Something
            break;
    }
}

这仅仅是基础设施偏好还是还有其他原因?

1 个答案:

答案 0 :(得分:2)

Swift选择选择与其他语言不同,否则就不需要新语言了。

switch尤其如此。除非被明确告知,否则选择不fallthrough。这允许它省略其他类C语言的普遍break(我认为这是一个很好的选择。考虑到我很少希望我的case能够通过)。

对于default,语言需要switches也是闻所未闻的,例如如this question中那样切换Java时的enum。在这种情况下,我通常会认为这是好事,因为我可能忘记在一些随机switch语句中添加一个案例,我打算在其中涵盖{{1}的所有值如果enum最终得到一个额外的元素,则为}或范围。通过这种方式,我有办法表达这一点(通过不实现enum子句),我认为这种方法优于不具备这种可能性(通过简单地假设“没有任何事情要做”,就像在C#中一样)。