下面的匹配开关语句有时似乎有效,而当我更改范围时,这些选择有时似乎没有意义。似乎是随机的。当试图在其他元组中的整数范围内匹配整数元组时,我能期望下面的设置是正确的吗?
// tuple case branches
import UIKit
// tuple case branches
let d = (1, 21, 15, 3, 2, 0)
switch d {
case (1...100, 21...100, 14...100, 3...100, 3...100, 0...100):
println("it's 1st") // it's 1st
fallthrough
case (1...100, 21...100, 15...100, 3...100, 2...100, 0...100):
println("it's 2nd")
fallthrough
case (1...100, 21...100, 15...100, 3...100, 2...100, 0...100):
println("it's 3nd")
default:
println("not 1st or 2nd or 3rd")
该开关只匹配每个元素严格属于该范围的情况。这就像元组中所有部分的AND条件。
你还使用了fallthrough,这意味着当看到第二个或第三个大小写块时,你总是会看到'it's 3rd '(你是说3rd吗?)。
所以在这种情况下,因为倒数第二个元组值是2,所以不适合第一个case语句。第二个和第三个被打印出来,因为你掉到下一个。