English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Swift базовый курс

Операторы Swift

Swift управление потоком

Swift коллекции

Swift функции

Swift 高级

Условный оператор switch в Swift

В этой статье вы узнаете, как использовать контрольную структуру switch для управления потоком выполнения программы.

switch-выражение также является одним из множества контролирующих структур Swift, таких какif-else,guardи т.д., они выполняют различные действия в зависимости от различных условий.

Преимуществом switch-выражения является то, что оно может сравнивать значение с несколькими возможными шаблонами совпадения. Таким образом, оно может заменить длинную диаграмму if..else..if и совпадать с сложными шаблонами.

Синтаксис switch-выражения

Синтаксис switch-выражения:

switch переменная/выражение {
case value1:
	// Инструкции
case value2:
	// Инструкции
default:
	// Инструкции
}

Как работает switch-выражение в Swift?

  • Switch-выражение вычисляется только один раз.

  • Оно принимает выражение и сравнивает его с каждым значением case по порядку (сверху -> вниз).

  • Если существует совпадение, то выполняются инструкции внутри case, и после выполнения первого совпадающего switch case, вся switch-выражение заканчивается.

  • Если ни один case не соответствует, то выполняется следующий case.

  • Если ни один case не соответствует, то выполняется код, указанный ключом default.

ВниманиеКаждый body case должен содержать по крайней мере одну выполняемую инструкцию.

Пример 1: Простой программ с использованием Switch-выражения

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Внутренние инструкции.

Пример 2: Switch-выражение с fallthrough

Если в случае использования ключевого слова 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 в консоли.

Пример 3: Выражение switch с более сложным шаблоном

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)
    В этом случае каждый элемент кортежа привязывается к временной константе или переменной.