Язык Swift часть 9. Оператор switch

Иногда для достижения целей создания условия if/else вполне достаточно. Если литров топлива в баке автомобиля больше нуля - автомобиль может ехать, если нет, то не может. Если игрок подобрал кольцо проиграй звук 1, если ударился о препятствие то звук 2.

Но случаются ситуации, когда двух исходов не достаточно.
Что если нам понадобиться переключаться сразу между множеством путей? Для этого существует оператор Switch. Его проще понять, если говорить о нем,как о переключателе. Switch с английского языка - переключатель.

Мы конечно можем реализовать логику путём написания множества if, которые будут обрабатывать каждый возможный вариант. Но зачем так усложнять, если задачу можно описать с помощью специального оператора.

Представим простую программу регулирования уровня громкости на устройстве.

// Регулируем громкость

var adjustVolume: Int // could be 0 to 4
adjustVolume = 2

switch adjustVolume {
case 0:
    setVolumeTo(0)
    print("Mute")
case 1: 
    setVolumeTo(25)
    print("25 percent")
case 2: 
    setVolumeTo(50)
    print("50 percent")
case 3:
    setVolumeTo(75)
    print("75 percent")
case 4: 
    setVolumeTo(100)
    print("Maximum volume")
default: 
    print("Nothing to do")
}

Что мы видим?

У нас есть переменная adjustVolume, которая может принимать значения от 0 до 4. Каждое значение регулирует громкость на 25 процентов.

Затем мы начинаем писать условие с помощью оператора Switch.
Обратим внимание на синтаксис.

Switch начинается с ключевого слова, затем пишется имя переменной или константы, значения которой необходимо отслеживать. Затем открываются круглые скобочки { и начинается перечисление всех возможных случаев, которые может принимать переменная.

switch someVarOrLet {
case 0:
    print("some code")
case 1:
    print("some code")

Выше описан пример, когда переменная принимает значения типа Int. Switch отслеживает любые ситуации, и совсем необязательно case будет числом. Все тоже самое имеет смысл и для всех других типов данных. Например:

let someVarOrLet: String 

switch someVarOrLet {
case "btc":
    print("Bitcoin")
case "eth":
    print("Etherium")
case "xrp":
    print("Ripple")

Так же после перечисления всех нужных нам случаев указывается значение по умолчанию, или default. Это означает, что если значение переменной не будет соответствовать ни одному из описанных случаев, то Switch выполнит код, написанный в default блоке:

let someVarOrLet: String 
someVarOrLet = "any"

switch someVarOrLet {
case "btc":
    print("Bitcoin")
case "eth":
    print("Etherium")
case "xrp":
    print("Ripple")
default: 
    print("Dont know this coin")

И так как default обрабатывает все остальные значения это будет являться концом Switch условия.

В языке Swift switch элемент case не может быть пустым. Нельзя написать:

switch level {
case 1:
case 2:
case 3: 
    print("Beginner level")
case 4:
case 5:
    print("Medium level")
case 6:
case 7:
    print("Hard level")
default: 
    print("other level")
}

Если несколько условий соответствуют какому-либо коду, мы пишем так:

switch level {
case 1,2,3:
    print("Beginner level")
case 4,5:
    print("Medium level")
case 6,7:
    print("Hard level")
default: 
    print("other level")
}

Так же если у нас много значений в каком-либо случае, можно использовать оператор диапазона - ...:

switch level {
case 1...5:
    print("Beginner level")
case 6...8:
    print("Medium level")
case 9...15:
    print("Hard level")
default: 
    print("other level")
}

Если вы столкнулись в любом месте Swift кода с таким синтаксисом ..., имейте ввиду, что вы имеете дело с диапазоном значений.

У диапазона бывает начало и конец:

start...end
1...10 // все значения от 1 до 10 включительно