Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ

Π’ Swift Π΅ΡΡ‚ΡŒ всС Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ Π½Π°ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ управлСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΈΠ· C-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… языков. К Π½ΠΈΠΌ относятся: Ρ†ΠΈΠΊΠ»Ρ‹ for-in ΠΈ while для ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ выполнСния Π·Π°Π΄Π°Ρ‡, инструкции if, guard ΠΈ switch для выполнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ ΠΊΠΎΠ΄Π° Π² зависимости ΠΎΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… условий, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Π°ΠΊΠΈΠ΅ инструкции, ΠΊΠ°ΠΊ break ΠΈ continue для пСрСмСщСния ΠΏΠΎΡ‚ΠΎΠΊΠ° выполнСния Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ вашСго ΠΊΠΎΠ΄Π°.

17 ноября 2022

Β 

Swift прСдоставляСт цикл for-in, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΠΎ массивам, словарям, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌ, строкам ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΠΌ.

Π’ Swift инструкция switch Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΡ‰Π½Π΅Π΅, Ρ‡Π΅ΠΌ Π΅Π³ΠΎ Π°Π½Π°Π»ΠΎΠ³ ΠΈΠ· языка C. Π’ Swift Π½Π΅ происходит проваливания ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ кСйсу, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½Π΅Π½Π½ΡƒΡŽ Π² C ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с пропуском ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° break. ΠšΠ΅ΠΉΡΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ шаблонов, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ сопоставлСниС Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ², ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ. БовпавшиС значСния Π² кСйсС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° switch ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ привязаны ΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ константС ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ для использования Π² Ρ‚Π΅Π»Π΅ кСйса, Π° слоТныС условия сравнСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ where для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ кСйса.

Π¦ΠΈΠΊΠ»Ρ‹ For-in

Π¦ΠΈΠΊΠ» for-in ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ коллСкциям элСмСнтов, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ чисСл, элСмСнты массива ΠΈΠ»ΠΈ символы Π² строкС.

МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» for-in вмСстС с массивом для ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π΅Π³ΠΎ элСмСнтам:


let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names {
    print("Hello, \(name)!")
}
// Hello, Anna!
// Hello, Alex!
// Hello, Brian!
// Hello, Jack!

Π’Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π΅Π³ΠΎ ΠΏΠ°Ρ€Π΅ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Когда происходит итСрация ΠΏΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π΅Π³ΠΎ элСмСнт возвращаСтся ΠΊΠ°ΠΊ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ (ΠΊΠ»ΡŽΡ‡, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅). Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒ Ρ‡Π»Π΅Π½Ρ‹ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ константы для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² Ρ‚Π΅Π»Π΅ Ρ†ΠΈΠΊΠ»Π° for-in. Π—Π΄Π΅ΡΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ словаря Ρ€Π°ΡΠΏΠ°Π΄Π°ΡŽΡ‚ΡΡ Π² константу animalName, Π° Π΅Π³ΠΎ значСния - Π² константу legCount:


let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
for (animalName, legCount) in numberOfLegs {
    print("\(animalName)s have \(legCount) legs")
}
// ants have 6 legs
// cats have 4 legs
// spiders have 8 legs

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ словаря ΠΏΠΎ сути своСй Π½Π΅ являСтся упорядочСнным, поэтому ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌΡ‹Π΅ ΠΈΠ· Π½Π΅Π³ΠΎ значСния Π²ΠΎ врСмя ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ упорядочСны. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ массивах ΠΈ словарях смотритС Π² Π³Π»Π°Π²Π΅ Π’ΠΈΠΏΡ‹ ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ.

Π’Ρ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ for-in с числовыми Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌΠΈ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ нСсколько ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ умноТСния Π½Π° 5:


for index in 1...5 {
    print("\(index) ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° 5 Π±ΡƒΠ΄Π΅Ρ‚ \(index * 5)")
}
// 1 ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° 5 Π±ΡƒΠ΄Π΅Ρ‚ 5
// 2 ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° 5 Π±ΡƒΠ΄Π΅Ρ‚ 10
// 3 ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° 5 Π±ΡƒΠ΄Π΅Ρ‚ 15
// 4 ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° 5 Π±ΡƒΠ΄Π΅Ρ‚ 20
// 5 ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° 5 Π±ΡƒΠ΄Π΅Ρ‚ 25

ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ элСмСнтов, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ происходит итСрация, являСтся Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ чисСл ΠΎΡ‚ 1 Π΄ΠΎ 5 Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°(...). Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ index устанавливаСтся Π² ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° (1), ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС, Ρ†ΠΈΠΊΠ» содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ запись ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ умноТСния Π½Π° ΠΏΡΡ‚ΡŒ для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ значСния index. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ index обновляСтся Π΄ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ значСния Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° (2), ΠΈ функция print(_:separator:terminator:) снова вызываСтся. Π­Ρ‚ΠΎΡ‚ процСсс Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнут ΠΊΠΎΠ½Π΅Ρ† Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ index являСтся константой, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ автоматичСски устанавливаСтся Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°. Как Ρ‚Π°ΠΊΠΎΠ²ΡƒΡŽ, Π΅Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ использованиСм. Π•Π΅ объявлСниС нСявно происходит Π² объявлСнии Ρ†ΠΈΠΊΠ»Π°, Π±Π΅Π· нСобходимости использования Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ слова let.

Если Π’Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ символ подчёркивания вмСсто ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ:


let base = 3
let power = 10
var answer = 1
for _ in 1...power {
    answer *= base
}
print("\(base) Π² стСпСни \(power) Ρ€Π°Π²Π½ΠΎ \(answer)")
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "3 Π² стСпСни 10 Ρ€Π°Π²Π½ΠΎ 59049"

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ вычисляСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ числа Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС 3 Π² стСпСни 10). ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1 (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ 3 Π² стСпСни 0) умноТаСтся Π½Π° 3 Π΄Π΅ΡΡΡ‚ΡŒ Ρ€Π°Π·, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ начинаСтся с 1, ΠΈ заканчиваСтся 10. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π½Π΅Ρ‚ нСобходимости Π·Π½Π°Ρ‚ΡŒ значСния счётчика Π²ΠΎ врСмя ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° - ΠΎΠ½ просто Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство Ρ€Π°Π·. Π‘ΠΈΠΌΠ²ΠΎΠ» подчёркивания "_" (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вмСсто ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ†ΠΈΠΊΠ»Π°) ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния ΠΈ Π½Π΅ прСдоставляСт доступ ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π²ΠΎ врСмя ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°.

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΌΠΊΠ½ΡƒΡ‚Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΎΠ±Π° ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… значСния Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΈΠ½ΡƒΡ‚Π½Ρ‹Π΅ значСния Π² Π²ΠΈΠ΄Π΅ Ρ‡Π΅Ρ€Ρ‚ΠΎΡ‡Π΅ΠΊ Π½Π° часах. Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ 60 Ρ‚Π°ΠΊΠΈΡ… ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΎΠΊ, начиная с 0 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ»ΡƒΠ·Π°ΠΌΠΊΠ½ΡƒΡ‚Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ( ..<), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ниТнюю Π³Ρ€Π°Π½ΠΈΡ†Ρƒ, Π½ΠΎ Π½Π΅ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ. Для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ³ΠΎ изучСния Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Π³Π»Π°Π²Ρƒ ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°.


let minutes = 60
for tickMark in 0..

НСкоторыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, захотят ΠΈΠΌΠ΅Ρ‚ΡŒ помСньшС ΠΌΠΈΠ½ΡƒΡ‚Π½Ρ‹Ρ… Π΄Π΅Π»Π΅Π½ΠΈΠΉ, ΠΈ, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΎΠ½ΠΈ захотят ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ Π½Π° Ρ†ΠΈΡ„Π΅Ρ€Π±Π»Π°Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 5 ΠΌΠΈΠ½ΡƒΡ‚. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ нас Π±Ρ‹Π»Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ stride(from:to:by:).


let minuteInterval = 5
for tickMark in stride(from: 0, to: minutes, by: minuteInterval) {
    // render the tick mark every 5 minutes (0, 5, 10, 15 ... 45, 50, 55)
}

Π’Π°ΠΊ ΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ с Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌΠΈ, Π½ΠΎ ΡƒΠΆΠ΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° stride(from:through:by:):


let hours = 12
let hourInterval = 3
for tickMark in stride(from: 3, through: hours, by: hourInterval) {
    // render the tick mark every 3 hours (3, 6, 9, 12)
}

Π¦ΠΈΠΊΠ»Ρ‹ While

Π¦ΠΈΠΊΠ» while выполняСт Π½Π°Π±ΠΎΡ€ инструкций Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π΅Π³ΠΎ условиС Π½Π΅ станСт false. Π­Ρ‚ΠΎΡ‚ Π²ΠΈΠ΄ Ρ†ΠΈΠΊΠ»ΠΎΠ² Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° количСство ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄Π° Π² Ρ†ΠΈΠΊΠ» нСизвСстно. Swift ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π΄Π²Π° Π²ΠΈΠ΄Π° Ρ†ΠΈΠΊΠ»ΠΎΠ² while:

  • while - вычисляСт условиС выполнСния Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°.
  • repeat-while - вычисляСт условиС выполнСния Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°.

While

Π¦ΠΈΠΊΠ» while начинаСтся с вычислСния условия. Если условиС истинно, Ρ‚ΠΎ инструкции Π² Ρ‚Π΅Π»Π΅ Ρ†ΠΈΠΊΠ»Π° Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΎ Π½Π΅ станСт Π»ΠΎΠΆΠ½Ρ‹ΠΌ.

ΠžΠ±Ρ‰ΠΈΠΉ Π²ΠΈΠ΄ Ρ†ΠΈΠΊΠ»Π° while выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  1. while условиС {
  2. инструкции
  3. }

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° простая ΠΈΠ³Ρ€Π° Π—ΠΌΠ΅ΠΈ ΠΈ ЛСстницы (Ρ‚Π°ΠΊΠΆΠ΅ извСстная, ΠΊΠ°ΠΊ Π“ΠΎΡ€Ρ‹ ΠΈ ЛСстницы):

Π˜Π³Ρ€Π° ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ:

  • Доска Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° 25 ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ΠΈ Ρ†Π΅Π»ΡŒ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡ‚Π°Ρ‚ΡŒ Π½Π° 25-Ρ‹ΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ ΠΈΠ»ΠΈ Π·Π° Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ.
  • Π˜Π³Ρ€ΠΎΠΊΒ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ с "Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°", ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ располоТСн Π² самом Π»Π΅Π²ΠΎΠΌ Π½ΠΈΠΆΠ½Π΅ΠΌ ΡƒΠ³Π»Ρƒ доски.
  • Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ…ΠΎΠ΄Π° Π²Ρ‹ бросаСтС ΠΈΠ³Ρ€Π°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π° Ρ‚ΠΎ число шагов, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ΠΏΠ°Π»ΠΎ послС броска, Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ пунктирная стрСлка.
  • Если ваш Ρ…ΠΎΠ΄ заканчиваСтся Π½Π° основании лСстницы, Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠΎ Π½Π΅ΠΉ Π²Π²Π΅Ρ€Ρ….
  • Если ваш Ρ…ΠΎΠ΄ заканчиваСтся Π½Π° Π³ΠΎΠ»ΠΎΠ²Π΅ Π·ΠΌΠ΅ΠΈ, Ρ‚ΠΎ Π²Ρ‹ ΡΠΏΡƒΡΠΊΠ°Π΅Ρ‚Π΅ΡΡŒ Π²Π½ΠΈΠ· ΠΏΠΎ хвосту Π·ΠΌΠ΅ΠΈ.

Π˜Π³Ρ€ΠΎΠ²Π°Ρ доска Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ прСдставлСна массивом Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° Int. Π•Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ хранится Π² константС finalSquare, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ массива, Ρ‚Π°ΠΊ ΠΈ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ условия ΠΏΠΎΠ±Π΅Π΄Ρ‹. Π’.ΠΊ. ΠΈΠ³Ρ€ΠΎΠΊΠΈ ΡΡ‚Π°Ρ€Ρ‚ΡƒΡŽΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ доски, с "Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°", ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ инициализируСтся 26-ю, Π° Π½Π΅ 25-ю цСлочислСнными Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ значСниями(ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ с индСксом ΠΎΡ‚ 0 Π΄ΠΎ 25 Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ):


let finalSquare = 25
var board = [Int](repeating: 0, count: finalSquare + 1)

Π—Π°Ρ‚Π΅ΠΌ, для обозначСния лСстниц ΠΈ Π·ΠΌΠ΅ΠΉ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°ΠΌ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния. ΠšΠ²Π°Π΄Ρ€Π°Ρ‚Ρ‹ с основаниСм лСстницы, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ вас Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ доскС, ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρ‹ с Π³ΠΎΠ»ΠΎΠ²ΠΎΠΉ Π·ΠΌΠ΅ΠΈ, ΡΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΠ΅ вас Π²Π½ΠΈΠ· - ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅.


board[03] = +08; board[06] = +11; board[09] = +09; board[10] = +02
board[14] = -10; board[19] = -11; board[22] = -02; board[24] = -08

ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ 3 с основаниСм лСстницы ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ вас Π²Π²Π΅Ρ€Ρ… Π½Π° 11 ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚. Π§Ρ‚ΠΎΠ±Ρ‹ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, элСмСнту массива board[03] присваиваСтся +08, Ρ‡Ρ‚ΠΎ эквивалСнтно Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ 8 Ρ‚ΠΈΠΏΠ° Int (Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ 3 ΠΈ 11). Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΡƒΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ плюса (+i) ΡƒΡ€Π°Π²Π½ΠΎΠ²Π΅ΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΡƒΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ минуса (-i), Π° числам Π½ΠΈΠΆΠ΅ 10 приписаны Π½ΡƒΠ»ΠΈ. (Π’ этих Π΄Π²ΡƒΡ… стилистичСских надстройках Π½Π΅Ρ‚ прямой нСобходимости, Π½ΠΎ ΠΎΠ½ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ).


var square = 0
var diceRoll = 0
while square < finalSquare {
  // бросок ΠΊΡƒΠ±ΠΈΠΊΠ°
  diceRoll += 1
  if diceRoll == 7 { diceRoll = 1 }
  // Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° Π²Ρ‹ΠΏΠ°Π²ΡˆΠ΅Π΅ количСство шагов
  square += diceRoll
  if square < board.count {
    // Ссли ΠΌΡ‹ всС Π΅Ρ‰Π΅ Π½Π° ΠΏΠΎΠ»Π΅, ΠΈΠ΄Ρ‚ΠΈ Π²Π²Π΅Ρ€Ρ… ΠΈΠ»ΠΈ Π²Π½ΠΈΠ· ΠΏΠΎ змСям ΠΈΠ»ΠΈ лСстницам
    square += board[square]
  }
}
print("Game over!")

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ самый простой ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ броска ΠΊΡƒΠ±ΠΈΠΊΠ°. ВмСсто использования Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° случайных чисСл, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ diceRoll начинаСтся с 0. ΠšΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ Ρ†ΠΈΠΊΠ»Π° пСрСмСнная diceRoll увСличиваСтся Π½Π° 1 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инфиксного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Β (+= 1), послС Ρ‡Π΅Π³ΠΎ провСряСтся Π½Π΅ стало Π»ΠΈ Π΅Ρ‘ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ слишком большим. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ += diceRoll Ρ€Π°Π²Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ diceRoll послС Π΅Ρ‘ инкрСмСнтирования. Когда это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ становится Ρ€Π°Π²Π½Ρ‹ΠΌ 7, ΠΎΠ½ΠΎ сбрасываСтся Π½Π° 1. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ diceRoll, которая всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: 1, 2, 3, 4, 5, 6, 1, 2 ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

ПослС броска ΠΊΡƒΠ±ΠΈΠΊΠ° ΠΈΠ³Ρ€ΠΎΠΊ пСрСмСщаСтся Π²ΠΏΠ΅Ρ€Π΅Π΄ Π½Π° количСство ΠΊΠ»Π΅Ρ‚ΠΎΠΊ, Ρ€Π°Π²Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ diceRoll. Π’ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ случай, ΠΊΠΎΠ³Π΄Π° бросок ΠΊΡƒΠ±ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΠ° Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° 25. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΈΠ³Ρ€Π° заканчиваСтся. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с Ρ‚Π°ΠΊΠΈΠΌ сцСнариСм, ΠΊΠΎΠ΄ провСряСт Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ square мСньшС Ρ‡Π΅ΠΌ свойство count массива board ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΈΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ значСния, хранящСгося Π² board[square] ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ square для пСрСмСщСния ΠΈΠ³Ρ€ΠΎΠΊΠ° Π²Π²Π΅Ρ€Ρ… ΠΈΠ»ΠΈ Π²Π½ΠΈΠ· ΠΏΠΎ змСям ΠΈΠ»ΠΈ лСстницам.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

Если Π±Ρ‹ этой ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π΅ Π±Ρ‹Π»ΠΎ, ΠΌΠΎΠ³Π»Π° Π±Ρ‹ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° обращСния ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ board[square], находящСмуся Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ массива board, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ Π±Ρ‹ ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ ошибки. Если square Ρ€Π°Π²Π½ΠΎ 26, ΠΊΠΎΠ΄ попытаСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ board[26], ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива.

ВСкущая итСрация Ρ†ΠΈΠΊΠ»Π° заканчиваСтся, послС Ρ‡Π΅Π³ΠΎ провСряСтся условиС Ρ†ΠΈΠΊΠ»Π°, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. Если ΠΈΠ³Ρ€ΠΎΠΊ пСрСмСстился Π½Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ 25 ΠΈΠ»ΠΈ Π·Π° Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ условия Π±ΡƒΠ΄Π΅Ρ‚ вычислСно ΠΊΠ°ΠΊ false ΠΈ ΠΈΠ³Ρ€Π° закончится.

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС использованиС while являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящим, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ³Ρ€Ρ‹ нСизвСстна ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π°. Π¦ΠΈΠΊΠ» просто исполняСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ условиС.

Π¦ΠΈΠΊΠ» repeat-while

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ†ΠΈΠΊΠ»Π° while, извСстный ΠΊΠ°ΠΊ Ρ†ΠΈΠΊΠ» repeat-while, выполняСт ΠΎΠ΄Π½Ρƒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ происходит ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° условия. Π—Π°Ρ‚Π΅ΠΌ Ρ†ΠΈΠΊΠ» ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° условиС Π½Π΅ станСт false.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

Π¦ΠΈΠΊΠ» repeat-while Π² Swift Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Ρ†ΠΈΠΊΠ»Ρƒ do-while Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках.

ΠžΠ±Ρ‰ΠΈΠΉ Π²ΠΈΠ΄ Ρ†ΠΈΠΊΠ»Π° repeat-while выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  1. repeat {
  2. инструкции
  3. } while условиС

НиТС снова прСдставлСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ³Ρ€Ρ‹ Π—ΠΌΠ΅ΠΈ ΠΈ ЛСстницы , написанный с использованиСм Ρ†ΠΈΠΊΠ»Π° repeat-while. ЗначСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… finalSquare, board, square ΠΈ diceRoll ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ Π² случаС с Ρ†ΠΈΠΊΠ»ΠΎΠΌ while:


let finalSquare = 25
var board = [Int](repeating: 0, count: finalSquare + 1)
board[03] = +08; board[06] = +11; board[09] = +09; board[10] = +02
board[14] = -10; board[19] = -11; board[22] = -02; board[24] = -08
var square = 0
var diceRoll = 0

Π’ этой вСрсии ΠΈΠ³Ρ€Ρ‹ Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ†ΠΈΠΊΠ»Π° происходит ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π·ΠΌΠ΅ΠΉ ΠΈΠ»ΠΈ лСстниц Π½Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π΅. Ни ΠΎΠ΄Π½Π° лСстница Π½Π° ΠΏΠΎΠ»Π΅ Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΈΠ³Ρ€ΠΎΠΊΠ° Π½Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ 25. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚ΡŒ Π² ΠΈΠ³Ρ€Π΅, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΠ²ΡˆΠΈΡΡŒ Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ лСстницС. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, такая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π² самом Π½Π°Ρ‡Π°Π»Π΅ Ρ†ΠΈΠΊΠ»Π° являСтся Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ бСзопасной.

Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ³Ρ€Ρ‹ ΠΈΠ³Ρ€ΠΎΠΊ находится Π½Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π΅ 0. board[0] всСгда равняСтся 0 ΠΈ Π½Π΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ влияния:


repeat {
  // ΠΈΠ΄Ρ‚ΠΈ Π²Π²Π΅Ρ€Ρ… ΠΈΠ»ΠΈ Π²Π½ΠΈΠ· ΠΏΠΎ змСям ΠΈΠ»ΠΈ лСстницам
  square += board[square]
  // Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΊΡƒΠ±ΠΈΠΊ
  diceRoll += 1
  if diceRoll == 7 { diceRoll = 1 }
  // Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° Π²Ρ‹ΠΏΠ°Π²ΡˆΠ΅Π΅ количСство шагов
  square += diceRoll
} while square < finalSquare
print("Game over!")

ПослС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π·ΠΌΠ΅ΠΉ ΠΈ лСстниц происходит бросок ΠΊΡƒΠ±ΠΈΠΊΠ° ΠΈ ΠΈΠ³Ρ€ΠΎΠΊ продвигаСтся Π²ΠΏΠ΅Ρ€Π΅Π΄ Π½Π° количСство ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ², Ρ€Π°Π²Π½ΠΎΠ΅ diceRoll. ПослС этого тСкущая итСрация Ρ†ΠΈΠΊΠ»Π° заканчиваСтся.

УсловиС Ρ†ΠΈΠΊΠ»Π° (while square < finalSquare) Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ€Π°Π½ΡŒΡˆΠ΅, Π½ΠΎ Π² этот Ρ€Π°Π· ΠΎΠ½ΠΎ Π½Π΅ вычисляСтся Π΄ΠΎ окончания ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ запуска Ρ†ΠΈΠΊΠ»Π°. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ†ΠΈΠΊΠ»Π° repeat-while Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для этой ΠΈΠ³Ρ€Ρ‹, Ρ‡Π΅ΠΌ Ρ†ΠΈΠΊΠ» while Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Π’ Ρ†ΠΈΠΊΠ»Π΅ repeat-while Π²Ρ‹ΡˆΠ΅ square += board[square] всСгда выполняСтся сразу, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π² Ρ†ΠΈΠΊΠ»Π΅ while происходит ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ square всС Π΅Ρ‰Π΅ находится Π½Π° ΠΏΠΎΠ»Π΅. Π’Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ†ΠΈΠΊΠ»Π° repeat-while снимаСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсии ΠΈΠ³Ρ€Ρ‹.

Β 

УсловныС инструкции

Иногда Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ куски ΠΊΠΎΠ΄Π° Π² зависимости ΠΎΡ‚ условий. А ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ исполнСниС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π² случаС возникновСния ошибки ΠΈΠ»ΠΈ просто ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ сообщСниС, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ становится слишком большим. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ ваш ΠΊΠΎΠ΄ условным.

Swift прСдоставляСт Π½Π°ΠΌ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ условныС отвСтвлСния ΠΊΠΎΠ΄Π° - это ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ инструкции if ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ инструкции switch. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽΒ if, Ссли нашС условиС достаточно простоС ΠΈ прСдусматриваСт всСго нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ². А Π²ΠΎΡ‚ инструкция switch ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π±ΠΎΠ»Π΅Π΅ слоТных условий, с ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ Π²Ρ‹Π±ΠΎΡ€Π°, ΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π° Π² ситуациях, Π³Π΄Π΅ ΠΏΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΌΡƒ совпадСнию с условиСм ΠΈ выбираСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Π²Π΅Ρ‚ΠΊΠ° ΠΊΠΎΠ΄Π° для исполнСния.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ if

Π’ самой простой своСй Ρ„ΠΎΡ€ΠΌΠ΅ инструкция if ΠΈΠΌΠ΅Π΅Ρ‚ всСго ΠΎΠ΄Π½ΠΎ условиС if. Эта инструкция выполняСт установлСнныС инструкции Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС, ΠΊΠΎΠ³Π΄Π° условиС true:


var temperatureInFahrenheit = 30
if temperatureInFahrenheit <= 32 {
     print ("It's very cold. Consider wearing a scarf.")
}
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "It's very cold. Consider wearing a scarf.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ провСряСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½ΠΈΠΆΠ΅ ΠΈΠ»ΠΈ 32 (0 ΠΏΠΎ ЦСльсию) градусов ΠΏΠΎ Π€Π°Ρ€Π΅Π½Π³Π΅ΠΉΡ‚Ρƒ Π»ΠΈΠ±ΠΎ Ρ€Π°Π²Π½Π° ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅. Если ΠΎΠ½Π° Π½ΠΈΠΆΠ΅, Ρ‚ΠΎ вывСдСтся сообщСниС. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ сообщСния Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, ΠΈ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ своС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ послС Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠΉ скобки инструкции if.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡΒ if ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ инструкций Π² Π²Π΅Ρ‚ΠΊΠ΅ извСстной ΠΊΠ°ΠΊ ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΠ° else, которая Π½ΡƒΠΆΠ½Π° Π² случаС, Ссли условиС false. Π­Ρ‚ΠΈ инструкции ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово else:


temperatureInFahrenheit = 40
if temperatureInFahrenheit <= 32 {
    print("It's very cold. Consider wearing a scarf.")
} else {
    print("It's not that cold. Wear a t-shirt.")
}
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "It's not that cold. Wear a t-shirt."

Π’ этом ΠΊΠΎΠ΄Π΅ всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΊΠΎΠ΄ Π»ΠΈΠ±ΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ, Π»ΠΈΠ±ΠΎ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΈ. Из-Π·Π° Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° выросла Π΄ΠΎ 40 градусов Π€Π°Ρ€Π΅Π½Π³Π΅ΠΉΡ‚Π°, Π·Π½Π°Ρ‡ΠΈΡ‚ большС Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΠΎΡΠΈΡ‚ΡŒ ΡˆΠ°Ρ€Ρ„, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ else выполняСтся.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ инструкции if ΠΌΠ΅ΠΆΠ΄Ρƒ собой, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТныС условия:


temperatureInFahrenheit = 90
if temperatureInFahrenheit <= 32 {
    print("It's very cold. Consider wearing a scarf.")
} else if temperatureInFahrenheit >= 86 {
    print("It's really warm. Don't forget to wear sunscreen.")
} else {
    print("It's not that cold. Wear a t-shirt.")
}
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "It's really warm. Don't forget to wear sunscreen.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π±Ρ‹Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ инструкция if, для соотвСтствия ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π°ΠΌ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ условиС else соотвСтствуСт всСм Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π°ΠΌ, Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π²ΡƒΠΌ условиям.

ПослСдняя else ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π° ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π°, Ссли Π² Π½Π΅ΠΉ Π½Π΅Ρ‚ нСобходимости:


temperatureInFahrenheit = 72
if temperatureInFahrenheit <= 32 {
    print("It's very cold. Consider wearing a scarf.")
} else if temperatureInFahrenheit >= 86 {
    print("It's really warm. Don't forget to wear sunscreen.")
}

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° Π½ΠΈ высокая, Π½ΠΈ низкая, ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎΠ½Π° Π½Π΅ соотвСтствуСт Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ сообщСния ΠΌΡ‹ Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ switch

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡΒ switch ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ значСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сравниваСтся с нСсколькими Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ шаблонами. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ совпало с ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ шаблоном, выполняСтся ΠΊΠΎΠ΄, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΡŽ этого шаблона, ΠΈ большС сравнСний ΡƒΠΆΠ΅ Π½Π΅ происходит. Switch прСдставляСт собой Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρƒ инструкции if, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π΅ΠΉ нСскольким ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ значСниям.

Π’ самой простой Ρ„ΠΎΡ€ΠΌΠ΅ Π² инструкции switch Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сравниваСтся с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°:


switch Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для сопоставлСния {
     case Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1: 
          инструкция для значСния 1
     case Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 3:
          инструкция для значСния 2 ΠΈΠ»ΠΈ значСния 3
     default: 
          инструкция, Ссли совпадСний с шаблонами Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ
}

ΠšΠ°ΠΆΠ΄Π°ΡΒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡΒ switch состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… случаСв ΠΈΠ»ΠΈ cases, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… начинаСтся с ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова case. Помимо сравнСния с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ значСниями, Swift ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π΅Ρ‰Π΅ нСсколько ΠΎΠΏΡ†ΠΈΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ случая для создания Π±ΠΎΠ»Π΅Π΅ слоТных ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Ρ… сравнСний. Об этих опциях ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π΄Π°Π»Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅.

Π’Π΅Π»Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° case Π² switch - это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Π²Π΅Ρ‚ΠΊΠ° ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ switch ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽΒ if. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡΒ switch опрСдСляСт ΠΊΠ°ΠΊΠΎΠ΅ ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½ΠΎ. Π­Ρ‚ΠΎ извСстно ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² настоящСС врСмя рассматриваСтся.

ΠšΠ°ΠΆΠ΄Π°ΡΒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡΒ switch Π΄ΠΎΠ»ΠΆΠ½Π°Β Π±Ρ‹Ρ‚ΡŒ ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰Π΅ΠΉ. Π’ΠΎ Π΅ΡΡ‚ΡŒ это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ совпадСниС с шаблоном Π² ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ случаС (case). Если Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π²ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ случаСв, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ случай ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя всС значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ случаи. Π’Π°ΠΊΠΎΠΉ случай ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ называСтся default, ΠΈ ΠΎΠ½ всСгда ΠΈΠ΄Π΅Ρ‚ послС всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаСв.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ switch рассматриваСт Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΉ символ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся someCharacter:


let someCharacter: Character = "z"
switch someCharacter {
case "a":
    print("The first letter of the alphabet")
case "z":
    print("The last letter of the alphabet")
default:
    print("Some other character")
}
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "The last letter of the alphabet"

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ кСйс инструкции switch соотвСтствуСт ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π±ΡƒΠΊΠ²Π΅ английского Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° -Β a, Π²Ρ‚ΠΎΡ€ΠΎΠΉ кСйс соотвСтствуСт послСднСй Π±ΡƒΠΊΠ²Π΅ -Β z. Π’Π°ΠΊ ΠΊΠ°ΠΊΒ switchΒ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ кСйс для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ символа, Π° Π½Π΅ просто для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°, Ρ‚ΠΎ Π² инструкции switch прСдусмотрСн дСфолтный кСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π²ΡƒΡ‡ΠΈΡ‚ ΠΊΠ°ΠΊΒ default, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ входят всС символы ΠΊΡ€ΠΎΠΌΠ΅ aΒ ΠΈ z. Как Ρ€Π°Π· это условиС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ инструкция switchΒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰Π΅ΠΉ.

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ case-ΠΏΡ€ΠΎΠ²Π°Π»ΠΎΠ²

Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ инструкции switch Π² языкС Swift ΠΎΡ‚ инструкции switch Π² C ΠΈ Objective-C составляСт отсутствиС ΠΏΡ€ΠΎΠ²Π°Π»ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· условия. ВмСсто этого инструкция switch ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ послС нахоТдСния ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ соотвСтствия с case ΠΈ выполнСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° Π² Π²Π΅Ρ‚ΠΊΠ΅, Π±Π΅Π· нСобходимости явного Π²Ρ‹Π·ΠΎΠ²Π° break. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽΒ switch Π±ΠΎΠ»Π΅Π΅ бСзопасным ΠΈ простым для использования, Ρ‡Π΅ΠΌ Π² C, ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ исполнСниС ΠΊΠΎΠ΄Π° Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ случая.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

Π₯отя break Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π² Swift, Π²Ρ‹ всС Ρ€Π°Π²Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для соотвСтствия ΠΈ для игнорирования ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ случая ΠΈΠ»ΠΈ просто для Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ случая, Π΅Ρ‰Π΅ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ исполнится ΠΊΠΎΠ΄. Π‘ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅Β ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Break Π² инструкции Switch.

Π’Π΅Π»ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ случая Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎ исполняСмоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Код Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ исполнСн ΠΈ выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции, Ссли Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


let anotherCharacter: Character = "a"
switch anotherCharacter {
case "a":  // ошибка, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ кСйс ΠΈΠΌΠ΅Π΅Ρ‚ пустоС Ρ‚Π΅Π»ΠΎ
case "A":
    print("The letter A")
default:
    print("Not the letter A")
}
// ошибка компиляции

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ инструкции switch Π² языкС C, switch Π² Swift Π½Π΅ соотвСтствуСт Π½ΠΈ "a", Π½ΠΈ "A". Но Π·Π°Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ case "a": Π½Π΅ содСрТит Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ исполняСмого выраТСния. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ случайныС "проваливания" ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ случая Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ бСзопаснСС ΠΈ Ρ‡ΠΈΡ‰Π΅ своСй ΠΊΡ€Π°Ρ‚ΠΊΠΎΡΡ‚ΡŒΡŽ.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ switch с ΠΎΠ΄Π½ΠΈΠΌ кСйсом подходил под "a"Β ΠΈΒ "A",ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ Π΄Π²Π° значСния Π² ΠΎΠ΄ΠΈΠ½ составной кСйс, Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ² значСния запятыми.


let anotherCharacter: Character = "a"
switch anotherCharacter {
case "a", "A":
    print("The letter A")
default:
    print("Not the letter A")
}
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "The letter A"

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ составной кСйс ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π±Ρ‹Π»ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ написан нСсколькими строчками. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π΄Π°Π»Π΅Π΅ Π² "Π‘ΠΎΡΡ‚Π°Π²Π½Ρ‹Π΅Β ΠšΠ΅ΠΉΡΡ‹".

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ вас появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π°Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎΒ switch кСйса, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅Β ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово fallthrough, ΠΊΠ°ΠΊ описано Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ….

БоотвСтствиС Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ

ЗначСния Π² кСйсах switch ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Ρ‹ Π½Π° ΠΈΡ… Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ цСлочислСнныС Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ для описания Π»ΡŽΠ±Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ худоТСствСнным языком:


let approximateCount = 62
let countedThings = "moons orbiting Saturn"
var naturalCount: String
switch approximateCount {
case 0:
    naturalCount = "no"
case 1..<5:
    naturalCount = "a few"
case 5..<12:
    naturalCount = "several"
case 12..<100:
    naturalCount = "dozens of"
case 100..<1000:
    naturalCount = "hundreds of"
default:
    naturalCount = "many"
}
print("There are \(naturalCount) \(countedThings).")
// Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ "There are dozens of moons orbiting Saturn."

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, approximateCount оцСниваСтся Π² инструкции switch. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ кСйс сравниваСт это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с числом или ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ approximateCount ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ‚ 12 Π΄ΠΎ 100, naturalCount присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "dozens of", ΠΈ исполнСниС пСрСмСщаСтся ΠΈΠ· инструкции switch.

ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ для тСстирования Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ инструкции switch. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ протСстирован с любой Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ΠΈΠ»ΠΈ с Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½. Π’Π°ΠΊ ΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ подчСркивания (_) для соотвСтствия любой Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅ Π±Π΅Ρ€Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΡƒ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (x, y), Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½ΡƒΡŽ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° (Int, Int) ΠΈ относит ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΊΠ°ΠΊ слСдуСт ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½ΠΈΠΆΠ΅:


let somePoint = (1, 1)
switch somePoint {
case (0, 0):
    print("\(somePoint) is at the origin")
case (_, 0):
    print("\(somePoint) is on the x-axis")
case (0, _):
    print("\(somePoint) is on the y-axis")
case (-2...2, -2...2):
    print("\(somePoint) is inside the box")
default:
    print("\(somePoint) is outside of the box")
}
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "(1, 1) is inside the box"

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈΒ switch опрСдСляСт: находится Π»ΠΈ Ρ‚ΠΎΡ‡ΠΊΠ° Π² Π½Π°Ρ‡Π°Π»Π΅ отсчСта (0,0),Β Π½Π° красной оси x,Β Π½Π° ΠΎΡ€Π°Π½ΠΆΠ΅Π²ΠΎΠΉ оси y,Β Π²Π½ΡƒΡ‚Ρ€ΠΈ синСго ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° 4Ρ…4, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‚ΠΎΡ‡ΠΊΠ° отсчСта находится Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ ΠΈΠ»ΠΈ находится Π²Π½Π΅ этого ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ C, инструкция switch Π² Swift позволяСт мноТСствСнноС совпадСниС ΠΈΠ»ΠΈ пСрСсСчСниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… случаСв. Π­Ρ‚ΠΎ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΡ‡ΠΊΠ° (0, 0) соотвСтствуСт всСм Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ΠΌ условиям Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Однако, Ссли Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ совпадСниС сразу с нСсколькими шаблонами, Ρ‚ΠΎ Π² расчСт принимаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ…. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠ° (0, 0) Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ ΡΠ»ΡƒΡ‡Π°ΡŽ case (0, 0):, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ случаи Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹.

ΠŸΡ€ΠΈΠ²ΡΠ·ΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

КСйс Π² инструкции switch ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ значСния, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ сравниваСтся, с Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ константами ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. Π­Ρ‚ΠΎ извСстно ΠΊΠ°ΠΊ связываниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ значСния "связаны" с Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ константами ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π»Π° кСйса.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅ Π±Π΅Ρ€Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΡƒ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (x, y), прСдставлСнной Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° (Int, Int) ΠΈ опрСдСляСт Π΅Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставлСн Π½ΠΈΠΆΠ΅:


let anotherPoint = (2, 0)
switch anotherPoint {
case (let x, 0):
    print("on the x-axis with an x value of \(x)")
case (0, let y):
    print("on the y-axis with a y value of \(y)")
case let (x, y):
    print("somewhere else at (\(x), \(y))")
}
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "on the x-axis with an x value of 2

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡΒ switch опрСдСляСт Π»Π΅ΠΆΠΈΡ‚ Π»ΠΈ Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° красной оси x ΠΈΠ»ΠΈ ΠΎΡ€Π°Π½ΠΆΠ΅Π²ΠΎΠΉ оси y, Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ½Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· осСй.

Π’Ρ€ΠΈ случая Π² инструкции switch ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ константы x, y, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ значСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΎΠ±ΠΎΠΈΡ… элСмСнтов ΠΈΠ· ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° anotherPoint. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ кСйсС (let x, 0): ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ любая Ρ‚ΠΎΡ‡ΠΊΠ° со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ y Ρ€Π°Π²Π½Ρ‹ΠΌ 0, Π° Π² константу x Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ x нашСй Ρ‚ΠΎΡ‡ΠΊΠΈ. Аналогично ΠΈ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° case (0, let y), этот кСйс Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΈΡ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ x Ρ€Π°Π²Π½ΠΎΠΉ 0, ΠΈ происходит присваиваниС значСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ y Π² Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ константу y.

ОбъявлСнная константа ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° кСйса. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ°ΠΊ сокращСнный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для Π²Ρ‹Π²ΠΎΠ΄Π° сообщСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ print.

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ инструкция switch Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ случая default. ПослСдний кСйс let (x, y)Β ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ кортСТ двух констант плСйсхолдСров, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒΒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π»ΡŽΠ±ΠΎΠΌΡƒΒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. Π’Π°ΠΊ ΠΊΠ°ΠΊ anotherPoint это ΠΊΠΎΡ€Ρ‚Π΅ΠΆ с двумя значСниями, этот кСйс ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΠ΄ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ значСния, ΠΈ кСйс default ΡƒΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½, Ρ‚Π°ΠΊ как инструкция switch ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰Π°Ρ.

Where

Π’ кСйсС инструкции switch ΠΌΡ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ условиС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова where.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΡƒ (x, y) Π½Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ рисункС:


let yetAnotherPoint = (1, -1)
switch yetAnotherPoint {
case let (x, y) where x == y:
    print("(\(x), \(y)) is on the line x == y")
case let (x, y) where x == -y:
    print("(\(x), \(y)) is on the line x == -y")
case let (x, y):
    print("(\(x), \(y)) is just some arbitrary point")
}
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "(1, -1) is on the line x == -y"

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ switch опрСдСляСт Π»Π΅ΠΆΠΈΡ‚ Π»ΠΈ Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° Π·Π΅Π»Π΅Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ, Π³Π΄Π΅ x == y, ΠΈΠ»ΠΈ Ρ„ΠΈΠΎΠ»Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ, Π³Π΄Π΅ x == -y, ΠΈΠ»ΠΈ Π½ΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Π½ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

Π’Ρ€ΠΈ кСйса ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ константы x, y, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π±Π΅Ρ€ΡƒΡ‚ значСния ΠΈΠ· ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° yetAnotherPoint. Π­Ρ‚ΠΈ константы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ условия where, для создания динамичСского Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°. КСйс switch совпадаСт с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ point Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли условиС ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΠΈ where Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true для этого значСния.

Как ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, послСдний кСйс Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ default Ρ‚ΡƒΡ‚ Ρ‚Π°ΠΊ ΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ инструкция switch являСтся ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰Π΅ΠΉ.

БоставныС кСйсы

Если нСсколько кСйсов инструкции switch содСрТат ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄ для исполнСния, Ρ‚ΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ этих кСйсов ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ послС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова case. Если хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· шаблонов кСйса соотвСтствуСт сравниваСмому Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Β ΠΈ сам кСйс соотвСтствуСт сравниваСмому Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. Π¨Π°Π±Π»ΠΎΠ½Ρ‹ Π² кСйсС ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ записаны Π½Π° нСсколько строк, Ссли ΠΈΡ…Β ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ. НапримСр:


let someCharacter: Character = "e"
switch someCharacter {
case "a", "e", "i", "o", "u":
    print("\(someCharacter) is a vowel")
case "b", "c", "d", "f", "g", "h", "j", "k", "l", "m",
     "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z":
    print("\(someCharacter) is a consonant")
default:
    print("\(someCharacter) is not a vowel or a consonant")
}
// НапСчатаСт "e is a vowel"

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ кСйс инструкции switch Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя сразу всС ΠΏΡΡ‚ΡŒ гласных английского языка записанных Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС. Аналогично Π²Ρ‚ΠΎΡ€ΠΎΠΉ кСйс содСрТит всС согласныС английского языка Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС. И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹ΠΉ кСйс содСрТит Π² сСбС всС ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ символы.

БоставныС кСйсы Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя привязку значСния. ВсС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ составных кСйсов Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый Π½Π°Π±ΠΎΡ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ каТдая связка Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ° ΠΈΠ· всСх шаблонов составного кСйса. Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, какая Ρ‡Π°ΡΡ‚ΡŒ составного кСйса совпала со сравниваСмым Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΠ΄ Π² Ρ‚Π΅Π»Π΅ всСгда ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ доступ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ  привязки ΠΈ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.


let stillAnotherPoint = (9, 0)
switch stillAnotherPoint {
case (let distance, 0), (0, let distance):
    print("On an axis, \(distance) from the origin")
default:
    print("Not on an axis")
}
// НапСчатаСт "On an axis, 9 from the origin"

КСйс Π²Ρ‹ΡˆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° шаблона: (let distance, 0), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ соотвСтсвуСт любой Ρ‚ΠΎΡ‡ΠΊΠ΅ Π½Π° оси x, ΠΈ (0, let distance), Ρ‡Ρ‚ΠΎ соотвСтствуСт Ρ‚ΠΎΡ‡ΠΊΠ΅ Π½Π° оси y. И Ρ‚ΠΎΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ шаблон Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя привязку для distance ΠΈ distance являСтся цСлочислСнным Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ для Π΄Π²ΡƒΡ… этих шаблонов, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π»Π° кСйса всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ доступ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ distance.

Β 

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ управлСния

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ управлСния ΠΌΠ΅Π½ΡΡŽΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ исполнСния вашСго ΠΊΠΎΠ΄Π°, пСрСдавая ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ΄Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. Π’ Swift Π΅ΡΡ‚ΡŒ ΠΏΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²Β ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ управлСния:

  • continue
  • break
  • fallthrough
  • return
  • throw

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ continue, break, fallthrough Π±ΡƒΠ΄ΡƒΡ‚ описаны Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ…,Β ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return Π±ΡƒΠ΄Π΅Ρ‚ описан Π² Π³Π»Π°Π²Π΅ Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ throwΒ Π±ΡƒΠ΄Π΅Ρ‚ описан Π²Β ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ошибки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Continue

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ continue Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Ρ†ΠΈΠΊΠ»Ρƒ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ. Он ΠΊΠ°ΠΊ Π±Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚: "Π― Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ» с Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ", Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° Π½Π΅ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚ всС ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ и гласныС Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС из строки, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π·Π°Π³Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ Ρ„Ρ€Π°Π·Ρƒ-Π³ΠΎΠ»ΠΎΠ²ΠΎΠ»ΠΎΠΌΠΊΡƒ:


let puzzleInput = "great minds think alike"
var puzzleOutput = ""
let charactersToRemove: [Character] = ["a", "e", "i", "o", "u", " "]
for character in puzzleInput {
    if charactersToRemove.contains(character) {
        continue
    } else {
        puzzleOutput.append(character)
    }
}
print(puzzleOutput)
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "grtmndsthnklk"

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹ΡˆΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ continue, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ соотвСтствиС с гласными Π·Π²ΡƒΠΊΠ°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠΌ, вызывая Ρ‚Π΅ΠΌ самым ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π½Π°Ρ‡Π°Π»ΠΎ Π½ΠΎΠ²ΠΎΠΉ.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Break

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break останавливаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ всСй инструкции управлСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован Π²Π½ΡƒΡ‚Ρ€ΠΈ инструкции switch ΠΈΠ»ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ дальнСйшСС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ switch ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ»Π° Ρ€Π°Π½ΡŒΡˆΠ΅, Ρ‡Π΅ΠΌ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒΡΡ сам ΠΏΠΎ сСбС.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Break Π² Ρ†ΠΈΠΊΠ»Π΅

Когда ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°, Ρ‚ΠΎ ΠΎΠ½Β Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΒ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚ΡƒΒ Ρ†ΠΈΠΊΠ»Π°, ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° продолТаСтся с ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки послС Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ скобки Ρ†ΠΈΠΊΠ»Π° (}). Никакой ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ дальнСйшиС ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Break Π² инструкции Switch

Когда ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ инструкции switch, Ρ‚ΠΎ ΠΎΠ½ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ исполнСниС ΠΊΠΎΠ΄Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ случая ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠΈΠ΄Ρ‹Π²Π°Π΅Ρ‚ исполнСниС Π½Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку послС Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ скобки (}) инструкции switch.

Π’Π°ΠΊ ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для сопоставлСния ΠΈΠ»ΠΈ игнорирования кСйсов Π² инструкции switch. Π’Π°ΠΊ ΠΊΠ°ΠΊ инструкция switch ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΈ Π½Π΅ допускаСт пустых кСйсов, Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ кСйсы для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ваши намСрСния ясными. Π’Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ это, ΠΊΠΎΠ³Π΄Π° ΠΏΠΈΡˆΠΈΡ‚Π΅ слово break Π² Ρ‚Π΅Π»Π΅ кСйса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ. Когда этот кСйс ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ΄ сравнСниС, Ρ‚ΠΎ break сразу Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ всСй инструкции switch.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

КСйс Π² инструкции switch, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, ΠΏΡ€ΠΈ компиляции выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ - это Π½Π΅ утвСрТдСния, ΠΈ ΠΎΠ½ΠΈ Π½Π΅ Π΄Π°ΡŽΡ‚ возмоТности ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ кСйсы. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ кСйс switch, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ break.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Character ΠΈ опрСдСляСт, являСтся Π»ΠΈ символ Ρ†Π΅Π»Ρ‹ΠΌ числом Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… языков. НСсколько языков Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ кСйс для краткости:


let numberSymbol: Character = "δΈ‰"  // Π¦ΠΈΡ„Ρ€Π° 3 Π² ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎΠΌ ΠšΠΈΡ‚Π°ΠΉΡΠΊΠΎΠΌ языкС
var possibleIntegerValue: Int?
switch numberSymbol {
case "1", "Ω‘", "δΈ€", "ΰΉ‘":
    possibleIntegerValue = 1
case "2", "Ω’", "二", "ΰΉ’":
    possibleIntegerValue = 2
case "3", "Ω£", "δΈ‰", "ΰΉ“":
    possibleIntegerValue = 3
case "4", "Ω€", "ε››", "ΰΉ”":
    possibleIntegerValue = 4
default:
    break
}
if let integerValue = possibleIntegerValue {
    print("The integer value of \(numberSymbol) is \(integerValue).")
} else {
    print("An integer value could not be found for \(numberSymbol).")
}
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "The integer value of δΈ‰ is 3."

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ провСряСт numberSymbol Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² Π½Π΅ΠΌ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа ΠΎΡ‚ 1 Π΄ΠΎ 4 Π½Π° арабском, латинском, китайском ΠΈΠ»ΠΈ тайском языках. Если совпадСниС Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· кСйсов switch устанавливаСт ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Int?, Π½Π°Π·Π²Π°Π½Π½ΡƒΡŽ possibleIntegerValue Π² подходящСС цСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ инструкция switch Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ привязку для опрСдСлСния наличия Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ possibleIntegerValue ΠΈΠΌΠ΅Π΅Ρ‚ нСявноС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎΠ΅ nil Π² силу Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ привязка ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли possibleIntegerValue Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… ΠΏΠ΅Ρ€Π²Ρ‹Ρ… кСйсов инструкции switch.

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π²Β ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ Π½Π΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Character, Ρ‚ΠΎ кСйс default ΡƒΠ»Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ΠΌ кСйсам. ΠšΠ΅ΠΉΡΡƒΒ default Π½Π΅ Π½Π°Π΄ΠΎ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ дСйствия, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ прописан Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ срабатываСт кСйс default, срабатываСт ΠΈ break, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ дСйствиС инструкции switch ΠΈ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ с if let.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Fallthrough

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡΒ switch Π² Swift Π½Π΅ проваливаСтся ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ кСйса в ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ. Напротив, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ находится соотвСтствиС с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ кСйсом, Ρ‚Π°ΠΊ сразу ΠΈ прСкращаСтся Ρ€Π°Π±ΠΎΡ‚Π° всСй инструкции. А Π² языкС C, Ρ€Π°Π±ΠΎΡ‚Π° инструкции switch Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ явного прСкращСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈ Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ соотвСтствия словом break Π² ΠΊΠΎΠ½Ρ†Π΅ кСйса, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΏΡ€ΠΈ соотвСтствии ΠΌΡ‹ провалимся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ случай ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ ΠΏΠΎΠΊΠ° Π½Π΅ встрСтим слово break. ИзбСТаниС ΠΏΡ€ΠΎΠ²Π°Π»ΠΎΠ² Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ‡Ρ‚ΠΎ инструкция switch Π² Swift Π±ΠΎΠ»Π΅Π΅ краткая ΠΈ прСдсказуСмая, Ρ‡Π΅ΠΌ ΠΎΠ½Π° ΠΆΠ΅ Π² C, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ срабатываниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… кСйсов ΠΏΠΎ ошибкС.

Если Π²Π°ΠΌ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ²Π°Π»ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Π² C, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ fallthrough Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ кСйсС. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ fallthrough для тСкстового описания Ρ†Π΅Π»ΠΎΠ³ΠΎ числа:


let integerToDescribe = 5
var description = "The number \(integerToDescribe) is"
switch integerToDescribe {
case 2, 3, 5, 7, 11, 13, 17, 19:
    description += " a prime number, and also"
    fallthrough
default:
    description += " an integer."
}
print(description)
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "The number 5 is a prime number, and also an integer."

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ объявляСм Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ°Β String, Π½Π°Π·Π²Π°Π½Π½ΡƒΡŽ description ΠΈ присваиваСм Π΅ΠΉ исходноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΠΎΡ‚ΠΎΠΌ ΠΌΡ‹ опрСдСляСм Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ integerToDescribe, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽΒ switch. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ integerToDescribe ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ списка кСйса, Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ тСкстовоС описаниС значСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ дополняСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ находится Π² default, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ‹ΡˆΠ΅ Π² ΡΡ€Π°Π±ΠΎΡ‚Π°Π²ΡˆΠ΅ΠΌ кСйсС стоит ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово fallthrough, послС Ρ‡Π΅Π³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Ρ€Π°Π±ΠΎΡ‚Π° инструкции switch.

Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ integerToDescribe Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ списку Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ нашСго СдинствСнного кСйса, Ρ‚ΠΎ срабатываСт кСйс ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ всС ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ значСния, Π½Π΅ вошСдшиС Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ кСйс, ΠΈ integerToDescribe ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² default.

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ сработала инструкция switch, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ описаниС числа, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ print(_:separator:terminator:). Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 5, Ρ‡Ρ‚ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ простоС число.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово fallthrough Π½Π΅ провСряСт условиС кСйса, ΠΎΠ½ΠΎ позволяСт ΠΏΡ€ΠΎΠ²Π°Π»ΠΈΡ‚ΡŒΡΡ ΠΈΠ· ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ кСйса Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠ»ΠΈ Π² default, Ρ‡Ρ‚ΠΎ совпадаСт со стандартным ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ инструкции switch Π² языкС C.

ΠœΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ инструкции

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΈΠ»ΠΈ инструкции switch Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈΠ»ΠΈ switch инструкций, создавая Ρ‚Π΅ΠΌ самым слоТноС Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ исполнСния ΠΊΠΎΠ΄Π°. Однако Ρ†ΠΈΠΊΠ»Ρ‹ ΠΈ инструкции switch ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ break, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΏΡ€Π΅ΠΆΠ΄Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ Ρ†ΠΈΠΊΠ» ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽΒ switch Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ break. Π’Π°ΠΊ ΠΆΠ΅, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ нСсколько Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ², Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ явноС ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π° ΠΊΠ°ΠΊΠΎΠΉ Ρ†ΠΈΠΊΠ» ΠΈΠΌΠ΅Π½Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ continue.

Для всСх этих Ρ†Π΅Π»Π΅ΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» ΠΈΠ»ΠΈ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽΒ switch ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠΌ инструкций ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ вмСстС с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ break ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ continue для прСдотвращСния ΠΈΠ»ΠΈ продолТСния исполнСния ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ инструкции.

ΠœΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈΒ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ строкС, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Π½Π°Ρ‡Π°Π»Π° инструкции, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ слСдуСт послС ΠΌΠ΅Ρ‚ΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ синтаксиса Ρ†ΠΈΠΊΠ»Π° while, хотя ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ со всСми инструкциями:



имя ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°: while условиС {
     исполняСмый ΠΊΠΎΠ΄
}

Π’ дальнСйшСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ break, continue с ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ while для Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ вСрсии Π—ΠΌΠ΅ΠΈ ΠΈ ЛСстницы, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ€Π°Π½Π΅Π΅ Π² "Π¦ΠΈΠΊΠ»Ρ‹ While". Π’ этот Ρ€Π°Π· Ρƒ нас появилось Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ:

  • Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚ΡŒ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π° ΠΊΠ»Π΅Ρ‚ΠΊΡƒ 25.

Если Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ броска ΠΊΡƒΠ±ΠΈΠΊΠ° Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ Ρ…ΠΎΠ΄ΠΎΠ² Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π½Π° 25 ΠΊΠ»Π΅Ρ‚ΠΊΡƒ, Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ Ρ€Π°Π·, Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π° ΠΊΠ»Π΅Ρ‚ΠΊΡƒ 25.

Π˜Π³Ρ€ΠΎΠ²Π°Ρ Π·ΠΎΠ½Π° доски ΠΎΡΡ‚Π°Π»Π°ΡΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π±Ρ‹Π»Π°:

Π’Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ finalSquare, board, square ΠΈ diceRoll ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡ€ΠΎΡˆΠ»Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΈΠ³Ρ€Ρ‹:


let finalSquare = 25
var board = [Int](repeating: 0, count: finalSquare + 1)
board[03] = +08; board[06] = +11; board[09] = +09; board[10] = +02
board[14] = -10; board[19] = -11; board[22] = -02; board[24] = -08
var square = 0
var diceRoll = 0

Π’ этой вСрсии ΠΈΠ³Ρ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ†ΠΈΠΊΠ» while ΠΈ инструкция switch для воплощСния Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈΠ³Ρ€Ρ‹. Π¦ΠΈΠΊΠ» while ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π½Π°Π·Π²Π°Π½Π½Ρ‹ΠΉ gameLoop, для ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΈΠ³Ρ€Ρ‹.

УсловиС Ρ†ΠΈΠΊΠ»Π° while square != finalSquare ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ строго Π½Π° ΠΊΠ»Π΅Ρ‚ΠΊΡƒ 25:


gameLoop: while square != finalSquare {
    diceRoll += 1
    if diceRoll == 7 { diceRoll = 1 }
    switch square + diceRoll {
    case finalSquare:
        //послС броска ΠΊΡƒΠ±ΠΈΠΊΠ° ΠΌΡ‹ ΠΏΠΎΠΏΠ°Π΄Π°Π΅ΠΌ Π½Π° ΠΊΠ»Π΅Ρ‚ΠΊΡƒ 25, ΠΈΠ³Ρ€Π° ΠΎΠΊΠΎΠ½Ρ‡Π΅Π½Π°
        break gameLoop
    case let newSquare where newSquare > finalSquare:
         //ΠΌΡ‹ ΠΊΠΈΠ½ΡƒΠ»ΠΈ ΠΊΡƒΠ±ΠΈΠΊ Π½Π° слишком большоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π·Π½Π°Ρ‡ΠΈΡ‚ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΈΠ½ΡƒΡ‚ΡŒ снова
        continue gameLoop
    default:
        //допустимоС Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌΡƒ полю, двигаСмся
        square += diceRoll
        square += board[square]
    }
}
print("Game over!")

Π˜Π³Ρ€Π°Π»ΡŒΠ½Π°Ρ ΠΊΠΎΡΡ‚ΡŒ бросаСтся Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ ΠΏΠΎ доскС ΠΈΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π² инструкции switch Π½Π° Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ Ρ…ΠΎΠ΄Π°, ΠΏΠΎΡ‚ΠΎΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ, Ссли Ρ‚Π°ΠΊΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ допустимо:

  • Если ΠΈΠ³Ρ€Π°Π»ΡŒΠ½Π°Ρ ΠΊΠΎΡΡ‚ΡŒ Π΄Π²ΠΈΠ³Π°Π΅Ρ‚ ΠΈΠ³Ρ€ΠΎΠΊΠ° Π½Π° послСднюю ΠΊΠ»Π΅Ρ‚ΠΊΡƒ, ΠΈΠ³Ρ€Π° заканчиваСтся. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break с ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠΌ gameLoop ΠΏΠ΅Ρ€Π΅ΠΊΠΈΠ΄Ρ‹Π²Π°Π΅Ρ‚ исполнСниС ΠΊΠΎΠ΄Π° Π½Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку ΠΊΠΎΠ΄Π° послС Ρ†ΠΈΠΊΠ»Π° while, которая ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ ΠΈΠ³Ρ€Ρƒ.
  • Если ΠΈΠ³Ρ€Π°Π»ΡŒΠ½Π°Ρ ΠΊΠΎΡΡ‚ΡŒ Π΄Π²ΠΈΠ³Π°Π΅Ρ‚ ΠΈΠ³Ρ€ΠΎΠΊΠ° Π΄Π°Π»Π΅Π΅ Ρ‡Π΅ΠΌ Π½Π° послСднюю ΠΊΠ»Π΅Ρ‚ΠΊΡƒ, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ считаСтся Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ, ΠΈ ΠΈΠ³Ρ€ΠΎΠΊΡƒ приходится ΠΊΠΈΠ΄Π°Ρ‚ΡŒ ΠΊΠΎΡΡ‚ΡŒ Π΅Ρ‰Π΅ Ρ€Π°Π·. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ continue с ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠΌ gameLoop Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π½ΠΎΠ²ΡƒΡŽ.
  • Π’ΠΎ всСх случаях Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€ΠΎΠΊΠ° Π½Π° diceRoll ΠΊΠ»Π΅Ρ‚ΠΎΠΊ допустимо ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ…ΠΎΠ΄ ΠΈΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈΠ³Ρ€Ρ‹ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ лСстниц ΠΈ Π·ΠΌΠ΅ΠΉ. Когда кончаСтся итСрация, ΠΌΡ‹ возвращаСмся Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° while, Π³Π΄Π΅ провСряСтся условиС Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… Ρ…ΠΎΠ΄ΠΎΠ².

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

Если ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ gameLoop, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ инструкции switch, Π° Π½Π΅ всСго Ρ†ΠΈΠΊΠ»Π° while. Но ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ gameLoop ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅ исполнСниС инструкции нуТно ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΈ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ нСобходимости ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ gameLoop, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ обращаСмся ΠΊ continue gameLoop для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. Π’ этой ΠΈΠ³Ρ€Π΅ всСго ΠΎΠ΄ΠΈΠ½ Ρ†ΠΈΠΊΠ», Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ двусмыслСнности Π½Π° ΠΊΠ°ΠΊΠΎΠΉ Ρ†ΠΈΠΊΠ» этот ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ. Однако ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π²Ρ€Π΅Π΄Π° Π½Π΅Ρ‚ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ явно ΡƒΠΊΠ°Π·Π°Π»ΠΈ gameLoop ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π² строкС с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ continue. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, дСлая Ρ‚Π°ΠΊ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ наш ΠΊΠΎΠ΄ нагляднСС ΠΈ восприятиС Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈΠ³Ρ€Ρ‹ становится Π±ΠΎΠ»Π΅Π΅ ясным.

Π Π°Π½Π½ΠΈΠΉ Π²Ρ‹Ρ…ΠΎΠ΄

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ guard, ΠΊΠ°ΠΊ ΠΈ инструкция if, выполняСт выраТСния Π² зависимости ΠΎΡ‚ логичСского значСния условия. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ guard, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ условиС ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ true, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ΄ послС самой инструкции guard выполнился. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ инструкции if, guard всСгда ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ else, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся, ΠΊΠΎΠ³Π΄Π° условиС оцСниваСтся ΠΊΠ°ΠΊ false.


func greet(person: [String: String]) {
  guard let name = person["name"] else {
    return
  }
  
  print("ΠŸΡ€ΠΈΠ²Π΅Ρ‚ \(name)!")
  
  guard let location = person["location"] else {
    print("НадСюсь Ρƒ тСбя Ρ‚Π°ΠΌ Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΏΠΎΠ³ΠΎΠ΄Π°.")
    return
  }
  
  print("НадСюсь Π² \(location) Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΏΠΎΠ³ΠΎΠ΄Π°.")
}

greet(person: ["name": "John"])
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "ΠŸΡ€ΠΈΠ²Π΅Ρ‚ John!"
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "НадСюсь Ρƒ тСбя Ρ‚Π°ΠΌ Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΏΠΎΠ³ΠΎΠ΄Π°."
greet(person: ["name": "Jane", "location": "Cupertino"])
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "ΠŸΡ€ΠΈΠ²Π΅Ρ‚ Jane!"
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "НадСюсь Π² Cupertino Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΏΠΎΠ³ΠΎΠ΄Π°.”

Если условиС инструкции guard Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΎΡΡŒ, Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° продолТаСтся послС Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ скобки guard. ВсС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ константы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ присвоили значСния с использованиСм ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ привязки Π² качСствС части условия guard, доступны Π½Π°ΠΌ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° области, Π³Π΄Π΅ Π±Ρ‹Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ guard.

Если условиС Π½Π΅ выполняСтся, Ρ‚ΠΎ исполняСтся ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ else. Π­Ρ‚Π° Π²Π΅Ρ‚ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠ΅Ρ€Π΅Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ исполнСниС ΠΊΠΎΠ΄Π° Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· этого Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ guard. А ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ инструкций return, break, continue, throw ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ fatalError(_file:line:).

ИспользованиС инструкции guard для ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с if. Он ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π²Π°ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² Π±Π»ΠΎΠΊ else ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ рядом с самими трСбованиями.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° доступности API

Π’ Swift Π΅ΡΡ‚ΡŒ встроСнная поддСрТка для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ доступности API, благодаря ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎΒ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅Β Β API-интСрфСйсы, нСдоступныС для Π΄Π°Π½Π½ΠΎΠΉΒ deployment target.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ доступности Π² SDK, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ всС API-интСрфСйсы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅Β Π² ΠΊΠΎΠ΄Π΅, доступны для deployment target, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ в вашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. Swift Π²Ρ‹Π΄Π°Π΅Ρ‚ сообщСниС ΠΎΠ± ошибкС Π²ΠΎ врСмя компиляции, Ссли Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСдоступный API.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ условиС доступности Π²Β ifΒ ΠΈΠ»ΠΈΒ guard инструкциях для Ρ‚ΠΎΠ³ΠΎ, чтобы условно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, доступны Π»ΠΈ API-интСрфСйсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ,Β Π²ΠΎ врСмя выполнСния. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· условия доступности, ΠΊΠΎΠ³Π΄Π° провСряСт Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒΒ API-интСрфСйсов в этом Π±Π»ΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π°.


if #available(iOS 10, macOS 10.12, *) {
    // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ API iOS 10 для iOS ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ API macOS 10.12 Π½Π° macOS
} else {
    // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π±ΠΎΠ»Π΅Π΅ старыС API для iOS ΠΈ macOS
}

УсловиС доступности Π²Ρ‹ΡˆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π° iOSΒ Ρ‚Π΅Π»ΠΎ if выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° iOSΒ 10 ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ… вСрсиях; Ρ‡Ρ‚ΠΎ касаСтся macOS:Β Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° macOS 10.12 ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ… вСрсиях. ПослСдний Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, *, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚Β ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π° любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, Ρ‚Π΅Π»ΠΎ if выполняСтся Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉΒ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ deployment target.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ видС условиС доступности ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ список Π½Π°Π·Π²Π°Π½ΠΈΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ ΠΈ вСрсий. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ названия ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ iOS,Β macOS,Β watchOS, ΠΈΒ tvOS;Β ΠΏΠΎΠ»Π½Ρ‹ΠΉ список ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Атрибуты объявлСний. Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ основных Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² вСрсий, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ iOS 8 ΠΈΠ»ΠΈ macOS 10.10, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ второстСпСнныС вСрсии Π½ΠΎΠΌΠ΅Ρ€Π°, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ iOS 8.3 ΠΈ macOS 10.10.3.

  1. if #available (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ вСрсия ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, ..., * ) {
  2. выраТСния для исполнСния, Ссли ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ API доступны
  3. } else {
  4. выраТСния для исполнСния, Ссли ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ API нСдоступны
  5. }
Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅
Руководство ΠΏΠΎ Swift