2016-04-24 2 views
1

Привет, я работаю над некоторыми основными быстрыми упражнениями. Это одно из операторов switch. Я выглядел высоко и низко, но не мог получить правильное объяснение для этого кода.кейс (пусть имя, пусть x)

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) 

Что именно здесь происходит? Как называется имя «Мэтт»? Почему вам не нужно вводить еще какой-нибудь код, создавая строку, известную как «Мэтт»? Например:

let name = "Matt" 

Также, что происходит с передачей х части? Использует ли константу:

let tuple = ("Matt", 30) 

Сообщите компьютеру, что в инструкции Switch уже есть строка и Int? Итак, всякий раз, когда используется любая строка, она будет ссылаться на «Мэтт»? Как если бы было сделать что-то вроде этого:

case(let dog, let z) 

Почему это не сделать то же самое, что «пусть имя, пусть х»?

Также как «x» относится к 30? Насколько я вижу, «x» будет строкой, но она воспринимается как Int.

ответ

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 со значением «Мэтт».Кроме того, это не имеет смысла делать это, потому что значение - это имя не собака. :-)

Если вы сделали свою первую линию как ...

let tuple = ("Oliver", 33) 

Тогда переменная будет называться «Оливер» и X будет 33.

+0

Спасибо за ответ, что ваш ответ очистил все для меня. – Oprahgets1

0

В заявлении switch вы устанавливаете tuple, содержащий строку Matt и целое число 30. case устанавливает эти значения name и age и сравнивает только age.

Вы можете использовать любые имена переменных, поэтому ваше имя dog будет именем, а z - это возраст. Компилятор не заботится об именах, если для кортежа имеется соответствующее количество.

+0

Спасибо за ответ! – Oprahgets1

Смежные вопросы