由于case:
阻止自动中断,Swift提供fallthrough关键字。这是有限的用途,因为它不会失败到下一个条件测试,它会绕过下一个测试,只执行下一个测试的代码。是否可以让switch语句在执行条件语句的同时在多个情况下执行代码?
作为Swift文档的一个例子,如果我需要下面的代码来执行应用于给定点的每个块,该怎么办?
let somePoint = (0, 0)
switch somePoint {
case (0, 0):
print("\(somePoint) is at the origin")
case (_, 0):
print("\(somePoint) is on the x-axis")
case (0, _):
print("\(somePoint) is on the y-axis")
case (-2...2, -2...2):
print("\(somePoint) is inside the box")
default:
print("\(somePoint) is outside of the box")
}
在书面上,它将只打印第一个描述,即使多个实际应用。在每个测试之后使用fallthrough会导致每个case块执行。
最佳答案
switch语句将值与模式进行比较并执行
基于第一个成功匹配的代码。
如果您的意图是匹配多个模式并执行
所有匹配项的代码然后使用多个if语句。
可以使用相同的案例模式:
if case (0, 0) = somePoint {
print("\(somePoint) is at the origin")
}
if case (_, 0) = somePoint {
print("\(somePoint) is on the x-axis")
}
// ...
if case (-2...2, -2...2) = somePoint {
print("\(somePoint) is inside the box")
}
// ...