我不清楚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)
,为什么不能再次引用它?
答案 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")
}