你好我正在做一些基本的快速运动。这个是切换语句。我看起来很高,但是不能为这段代码得到正确的解释。
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。
答案 0 :(得分:2)
元组只是一个携带多个值的变量。在您的示例中,元组属于(String, Int)
类型,因为这是您首次定义它的方式。
就像你let name = "Matt"
时一样,除了字符串旁边有Int
之外,这就是这样做。
然后,交换机根据模式匹配检查该元组。
(let name, let x)
只是从该元组中获取值并将其插入名为name
和x
的变量中,以便可以使用它们。如果没有这个,您将无法在代码中打印姓名或年龄。
如果你不关心你可以做的名字......
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
和整数30
。 case
将变量name
和age
设置为这些值,仅比较age
。
您可以使用任何变量名称,因此dog
将成为名称,z
将成为年龄。编译器不关心名称,只要它们具有适当数量的元组即可。