Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匹配多个条件的Swift开关_Swift_Switch Statement - Fatal编程技术网

匹配多个条件的Swift开关

匹配多个条件的Swift开关,swift,switch-statement,Swift,Switch Statement,由于case:阻止自动中断,Swift提供了fallthrough关键字。这是有限的使用,因为它不会进入下一个条件测试,它绕过下一个测试,只执行下一个测试中的代码。是否可以让switch语句在多种情况下执行代码,同时执行条件语句 作为Swift文档中的一个示例,如果我需要下面的代码来执行适用于给定点的每个块,该怎么办 let somePoint = (0, 0) switch somePoint { case (0, 0): print("\(somePoint) is at the o

由于
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")
}

在编写时,它将仅打印第一个描述,即使多个描述实际适用。在每次测试后使用故障排除会导致每个案例块执行。

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")
}
// ...

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")
}
// ...

这不是switch语句的用途——您可以使用多个if语句。当然,使用if语句要难看得多。如果有像FallthroughHandTest这样的东西,这将是非常好的。Swift switch已经是涡轮增压的了,我希望有一种技术可以做到这一点。我不认为有。这是一个有趣的想法
switch
过去是一种排他性构造,将一个值与一组确定的情况进行比较。在这种情况下,“
fallthroughAndTest
”没有意义,因为测试总是会失败(例如,如果一个整数
i
匹配
情况0
,则保证
情况1
的测试会失败)。因此,只有
故障排除
才有意义,但现在排他性限制已经解除,引入这样一个新的结构才有意义,这不是switch语句的目的——你可以使用多个if语句。当然,使用if语句更难看。如果有像FallthroughHandTest这样的东西,这将是非常好的。Swift switch已经是涡轮增压的了,我希望有一种技术可以做到这一点。我不认为有。这是一个有趣的想法
switch
过去是一种排他性构造,将一个值与一组确定的情况进行比较。在这种情况下,“
fallthroughAndTest
”没有意义,因为测试总是会失败(例如,如果一个整数
i
匹配
情况0
,则保证
情况1
的测试会失败)。因此,只有
故障排除
才有意义,但现在排他性限制已经解除,引入这样一个新的构造是有意义的。如果switch语句与您描述的一样,那么故障排除语句是否会损坏它?我正在通过Swift文档进行处理。有趣的是,描述“如果”的“控制流”部分并没有提到这个非常有用的“如果情况”。@user800268:这是语言参考中的示例。@user800268:这里的示例:,查找“可选模式”。-这里也解释了:。如果switch语句与您描述的一样,那么fallthrough语句是否会损坏它?请按照我的方式查看Swift文档。有趣的是,描述“如果”的“控制流”部分并没有提到这个非常有用的“如果情况”。@user800268:这是语言参考中的示例。@user800268:这里的示例:,查找“可选模式”。-这里也解释了:。