我最近开始学习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;
}
}
这仅仅是基础设施偏好还是还有其他原因?
答案 0 :(得分:2)
Swift选择选择与其他语言不同,否则就不需要新语言了。
对switch
尤其如此。除非被明确告知,否则选择不fallthrough
。这允许它省略其他类C语言的普遍break
(我认为这是一个很好的选择。考虑到我很少希望我的case
能够通过)。
对于default
,语言需要switches
也是闻所未闻的,例如如this question中那样切换Java
时的enum
。在这种情况下,我通常会认为这是好事,因为我可能忘记在一些随机switch
语句中添加一个案例,我打算在其中涵盖{{1}的所有值如果enum
最终得到一个额外的元素,则为}或范围。通过这种方式,我有办法表达这一点(通过不实现enum
子句),我认为这种方法优于不具备这种可能性(通过简单地假设“没有任何事情要做”,就像在C#中一样)。