case(让名字,让x)

时间:2016-04-24 09:15:44

标签: swift switch-statement

你好我正在做一些基本的快速运动。这个是切换语句。我看起来很高,但是不能为这段代码得到正确的解释。

let tuple = ("Matt", 30)
switch (tuple) {
case (let name, let x) where x >= 0 && x <= 2:
  print("\(name) is a infant")
case (let name, let x) where x >= 3 && x <= 12:
  print("\(name) is a child")
case (let name, let x) where x >= 13 && x <= 19:
  print("\(name) is a teenager")
case (let name, let x) where x >= 20 && x <= 39:
  print("\(name) is an adult")
case (let name, let x) where x >= 40 && x <= 60:
  print("\(name) is a middle aged")
case (let name, let x) where x >= 61:
  print("\(name) is a elderly")
default:
  print("Invalid age")

}

不仅仅是整个街区:

 case (let name, let x)

这到底发生了什么?名称如何引用“马特”?为什么不必输入更多代码来创建一个名为“Matt”的字符串?像这样:

let name = "Matt"

let x部分又是怎么回事?使用常量,:

let tuple = ("Matt", 30)

让计算机知道Switch语句中是否有String和Int?因此,无论何时使用任何String,它都会引用“Matt”?就像要做这样的事情:

case(let dog, let z) 

为什么不和“让名字,让x”做同样的事情?

“x”与30有什么关系?据我所知,“x”将是一个字符串,但它被视为一个Int。

2 个答案:

答案 0 :(得分:2)

元组只是一个携带多个值的变量。在您的示例中,元组属于(String, Int)类型,因为这是您首次定义它的方式。

就像你let name = "Matt"时一样,除了字符串旁边有Int之外,这就是这样做。

然后,交换机根据模式匹配检查该元组。

(let name, let x)只是从该元组中获取值并将其插入名为namex的变量中,以便可以使用它们。如果没有这个,您将无法在代码中打印姓名或年龄。

如果你不关心你可以做的名字......

case (_, let x):
print("This person is \(x) years old")

您无法在此处打印名称,因为您尚未将其放入变量名称。

你也可以case (let dog, let z):。这可行,现在变量dog将是String,其值为“Matt”。除非它真的没有意义,因为价值是一个名字不是狗。 : - )

如果你把第一行作为......

let tuple = ("Oliver", 33)

然后名称变量将是“Oliver”,X将是33。

答案 1 :(得分:0)

switch语句中,您设置的tuple包含字符串Matt和整数30case将变量nameage设置为这些值,仅比较age

您可以使用任何变量名称,因此dog将成为名称,z将成为年龄。编译器不关心名称,只要它们具有适当数量的元组即可。