Ответ 1
Операторы Swift switch
намного мощнее, чем те, которые используются на большинстве других языков. Вместо того, чтобы просто выбирать из группы значений, они используют сопоставление образцов, чтобы выбрать, какой case
для оценки. Давайте посмотрим на каждый case
из вашего примера:
case "celery":
Super simple - это будет соответствовать строке "celery"
и больше ничего.
case "cucumber", "watercress":
Этот случай будет соответствовать строке "cucumber"
или строке "watercress"
. Круто. На других языках вам, вероятно, потребуется использовать провальный случай, чтобы получить оба из них.
case let x where x.hasSuffix("pepper"):
Этот случай содержит два понятия, которые являются особыми для операторов Swift switch
, по сравнению с Java и C. Первый - привязка значения - часть let x
этого оператора связывает согласованное значение с константой x
который привязан к корпусу тела.
Далее - это предложение where
. Это логический тест, как и оператор if
, поэтому случай соответствует только выражению true
. В этом примере x.hasSuffix("pepper")
просматривает связанное значение и проверяет, заканчивается ли оно с "pepper"
. Строки "red pepper"
, "green pepper"
и "spicy hot pepper"
будут совпадать, но "peppercorns"
не будет.
default:
В Swift операторы switch
должны исчерпывать все возможные значения согласованного значения, поэтому они обычно заканчиваются блоком case default:
для обработки любого значения, которое ранее не было сопоставлено. Единственный раз, когда вы не увидите этого, - это то, что вы сопоставляете enum
только с несколькими значениями, поскольку вы можете вручную исчерпать все параметры.