switch 语句中 case 的顺序重要吗?
Does the order of cases in a switch statement matter?
var number = 10
var bool = false
switch (number, bool) {
case (_, false):
print("bool is false")
case (10, _):
print("number is 10")
default:
print("whatever")
}
以上将打印 "bool is false"
var number = 10
var bool = false
switch (number, bool) {
case (10, _):
print("number is 10")
case (_, false):
print("bool is false")
default:
print("whatever")
}
以上将打印 "number is 10"
为了进一步测试这一点,我将 default
案例移到了顶部并得到:
error: additional 'case' blocks cannot appear after the 'default'
block of a 'switch'
问题:
这是标准的基金会行为吗?我查看了 library,但没有找到有关案例顺序的任何信息。
此外,这是否意味着两个案例不能相同但可以重叠...并且它会通过先发生的案例来解决?
switch
语句是 Swift 语言的一部分,而不是任何特定的库,是的,顺序很重要。
将 switch 语句视为一系列 "if-then-else" 语句的快捷方式可能会有所帮助。假设我有以下声明:
switch(number) {
case (1):
do_something_for_one()
break
case (2):
do_something_for_two()
break
default:
do_something_for_default()
break
}
这在功能上等同于以下代码:
if(number == 1) {
do_something_for_one()
}
else if (number == 2) {
do_something_for_two()
}
else {
do_something_for_default()
}
您看到 default
代表 else
。在 else 之后添加 else if()
是没有意义的,因为它永远不会执行(else
'eats' 输入)
var number = 10
var bool = false
switch (number, bool) {
case (_, false):
print("bool is false")
case (10, _):
print("number is 10")
default:
print("whatever")
}
以上将打印 "bool is false"
var number = 10
var bool = false
switch (number, bool) {
case (10, _):
print("number is 10")
case (_, false):
print("bool is false")
default:
print("whatever")
}
以上将打印 "number is 10"
为了进一步测试这一点,我将 default
案例移到了顶部并得到:
error: additional 'case' blocks cannot appear after the 'default' block of a 'switch'
问题:
这是标准的基金会行为吗?我查看了 library,但没有找到有关案例顺序的任何信息。
此外,这是否意味着两个案例不能相同但可以重叠...并且它会通过先发生的案例来解决?
switch
语句是 Swift 语言的一部分,而不是任何特定的库,是的,顺序很重要。
将 switch 语句视为一系列 "if-then-else" 语句的快捷方式可能会有所帮助。假设我有以下声明:
switch(number) {
case (1):
do_something_for_one()
break
case (2):
do_something_for_two()
break
default:
do_something_for_default()
break
}
这在功能上等同于以下代码:
if(number == 1) {
do_something_for_one()
}
else if (number == 2) {
do_something_for_two()
}
else {
do_something_for_default()
}
您看到 default
代表 else
。在 else 之后添加 else if()
是没有意义的,因为它永远不会执行(else
'eats' 输入)