switch语句中的常量绑定实际上做了什么?

时间:2015-11-26 17:37:56

标签: swift switch-statement constants

我不清楚let语句中switch的使用方式。

考虑一下:

let greeting = (1,10)

switch greeting {

    case let (x,y) where x == y:
        print("hello")

    case (x,y) where x < y: //error here
        print("what's up")

    default: "No match"
}


根据{{​​3}}:

  

[...]案例中的模式也可以使用let关键字绑定常量(它们也可以使用var关键字绑定变量)。然后可以在相应的where子句中以及在案例范围内的其余代码中引用这些常量(或变量)。也就是说,如果案例包含多个与控制表达式匹配的模式,则这些模式都不能包含常量或变量绑定。


什么是绑定到我的示例的元组(x, y),为什么不能再次引用它?

1 个答案:

答案 0 :(得分:1)

来自Swift文档的引用:

  

...然后可以在相应的where子句和整个中引用   其余代码在案例范围内。

所以在第一种情况下

case let (x,y) where x == y:
    print("hello")

greeting(这是元组(1, 10))与。匹配 图案

let (x,y) where x == y

如果匹配,则x绑定到第一个元组元素 和y到第二个。

此绑定仅限于第一种情况的范围, 并且不能用于第二种或其他情况。

要编译代码,请为第二个添加另一个let绑定 情况下:

switch greeting {

case let (x,y) where x == y:
    print("\(x) is equal to \(y)")

case let (x,y) where x < y:
    print("\(x) is less than \(y)")

default:
    print("No match")
}