English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этой статье вы узнаете, как использовать контрольную структуру switch для управления потоком выполнения программы.
switch-выражение также является одним из множества контролирующих структур Swift, таких какif-else,guardи т.д., они выполняют различные действия в зависимости от различных условий.
Преимуществом switch-выражения является то, что оно может сравнивать значение с несколькими возможными шаблонами совпадения. Таким образом, оно может заменить длинную диаграмму if..else..if и совпадать с сложными шаблонами.
Синтаксис switch-выражения:
switch переменная/выражение { case value1: // Инструкции case value2: // Инструкции default: // Инструкции }
Switch-выражение вычисляется только один раз.
Оно принимает выражение и сравнивает его с каждым значением case по порядку (сверху -> вниз).
Если существует совпадение, то выполняются инструкции внутри case, и после выполнения первого совпадающего switch case, вся switch-выражение заканчивается.
Если ни один case не соответствует, то выполняется следующий case.
Если ни один case не соответствует, то выполняется код, указанный ключом default.
ВниманиеКаждый body case должен содержать по крайней мере одну выполняемую инструкцию.
let dayOfWeek = 4 switch dayOfWeek { case 1: print(воскресенье) case 2: print(понедельник) case 3: print(вторник) case 4: print(среда) case 5: print(четверг) case 6: print("Friday") case 7: print("Saturday") default: print("Невалидный день") }
Когда вы запустите вышеуказанную программу, вывод будет:
Wednesday
В上面的程序中, switch-выражение выполняет comparison значения dayOfWeek с case 1Совпадения для начала. Поскольку значение dayOfWeek не соответствует значению первого случая, оно снижается до следующего случая, пока не совпадет.
Из-заcase 4Соответствует выражению switch, поэтому выполняется команда print("среда") внутри case, и switch case завершается. Если ни один case не соответствует, выполняетсяdefaultВнутренние инструкции.
Если в случае использования ключевого слова fallthrough, даже если значение case не соответствует выражению switch, управление продолжит выполняться для следующего case.
let dayOfWeek = 4 switch dayOfWeek { case 1 : print(воскресенье) case 2: print(понедельник) case 3: print(вторник) case 4: print(среда) fallthrough case 5: print(четверг) case 6: print("Friday") case 7: print("Saturday") default: print("Невалидный день") }
Когда вы запустите вышеуказанную программу, вывод будет:
Wednesday Thursday
В вышеуказанной программе команда case 4 выполняет команду print("Wednesday") , ключевое слово fallthrough продолжает выполнять команду case 5. Команда print("Thursday") в case 5 выполняется, даже если cas не соответствует выражению switch. Поэтому вы также можете увидеть вывод Thursday в консоли.
let programmingLanguage = (name: "Go", version: 10) switch programmingLanguage { case (let name, let version) where (version < 0 && name.count < 0): print("Ввод недействителен") case ("Swift", let version) where version == 4: print("Найдена последняя версия Swift") case ("Swift", ...<4): print("Найдена старая версия swift") case ("Swift", 4...): print("Версия Swift больше 4 еще не выпущена") case ("Taylor Swift", 30): print("Моя беда. Это Тейлор Свифт") case (let name, let version): print(""" Язык программирования:\(name) Версия: \(version) Статус: Не найдено """ }
Когда вы запустите вышеуказанную программу, вывод будет:
Язык программирования: Go Версия: 10 Статус: Не найдено
В上面的 программе мы выполняем сопоставление выражения типа кортеж с различными случаями:
case (let name, let version) where (version < 0 && name.count < 0)
Этот пример показывает, как значение выражения switch привязывается к временной константе или переменной, чтобы использовать ключевое слово let для использования в верхнем и нижнем регистре. Это называется привязкой значения.
Вы также можете использовать where-подзадачу для применения условий к этим значениям. Для нескольких условий вы можете использовать оператор && для их объединения, как показано в примере.
Если case не удовлетворяет условию, определенному в where-подзадаче, то инструкции в этих блоках case не будут выполняться, и не будет возможности перейти к следующему switch case.
case ("Swift", ..<4 )
В этом случае первый элемент кортежа соответствует строковому литералу "Swift", и также проверяется, находится ли второй элемент в одностороннем диапазоне..<4。
case ("Swift", 4...)
В этом случае первый элемент кортежа соответствует строковому литералу "Swift", и также проверяется, находится ли второй элемент в одностороннем диапазоне 4...。
case (let name, let version)
В этом случае каждый элемент кортежа привязывается к временной константе или переменной.