详尽的开关
本文关键字:开关 | 更新日期: 2023-09-27 18:32:45
我最近开始学习 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;
}
}
这只是一种基础设施偏好,还是有其他原因?
Swift 选择了一些与其他语言不同的东西,否则就不需要新的语言了。
对于switch
尤其如此,例如,除非明确告知,否则选择不fallthrough
。这允许它省略其他类 C 语言的普遍break
(顺便说一句,考虑到我很少希望我的case
失败,我认为这是一个很好的选择(。
语言需要default
才能switches
,例如在打开enum
时需要Java
,就像这个问题一样,这也不是闻所未闻的。在这种情况下,我通常会认为这是一件好事,否则我可能会忘记在一些随机switch
语句中添加一个案例,如果enum
最终获得一个额外的元素,我打算涵盖enum
或范围的所有值。这样我就有一种方法来表达这一点(通过不实现default
子句(,我认为这比没有这种可能性(通过简单地假设"无所事事",如 C# 的情况(要好。