быстрый случай проваливается

146

У Свифта есть провал? например, если я сделаю следующее

var testVar = "hello"
var result = 0

switch(testVal)
{
case "one":
    result = 1
case "two":
    result = 1
default:
    result = 3
}

Можно ли выполнить один и тот же код для случая "один" и случая "два"?

Билал Сайед Хуссейн
источник

Ответы:

367

Да. Вы можете сделать это следующим образом:

var testVal = "hello"
var result = 0

switch testVal {
case "one", "two":
    result = 1
default:
    result = 3
}

Кроме того, вы можете использовать fallthroughключевое слово:

var testVal = "hello"
var result = 0

switch testVal {
case "one":
    fallthrough
case "two":
    result = 1
default:
    result = 3
}
Цезарий Войчик
источник
29
+1 за не только упоминание fallthrough, но и предложение использовать мульти-кейс
Thilo
3
Это такой хороший компромисс между опасностью провала C и отсутствием провала, например, в C #
Александр - Reinstate Monica
Кто-нибудь знает как провалиться из дела в дефолт? case "two", по умолчанию: не компилируется.
Зак Моррис
2
Неважно. Я понял, что комментирование дела делает его частью набора дел по умолчанию, поэтому: / * case "two", * / default: имеет эффект, который я ищу.
Зак Моррис
1
@AlexanderMomchliov C # имеет явный провал
Ян Ньюсон
8
var testVar = "hello"

switch(testVar) {

case "hello":

    println("hello match number 1")

    fallthrough

case "two":

    println("two in not hello however the above fallthrough automatically always picks the     case following whether there is a match or not! To me this is wrong")

default:

    println("Default")
}
Гленн Тисман
источник
Вы знаете способ провалиться в дело по умолчанию?
MarcJames
5
Я согласен с «вторым делом». Для меня это поведение отстой. Почему Swift выполняет следующий случай, даже если это не так? Это делает заявление о переключении совершенно бесполезным ...
Андреас Утцингер
7
case "one", "two":
    result = 1

Там нет операторов перерыва, но случаи гораздо более гибкими.

Приложение: Как указывает Analog File, breakв Swift действительно есть операторы. Они по-прежнему доступны для использования в циклах, но не нужны в switchвыражениях, если только вам не нужно заполнить пустой случай, так как пустые случаи не допускаются. Например: default: break.

nhgrif
источник
6

Вот пример для вас, чтобы легко понять:

let value = 0

switch value
{
case 0:
    print(0) // print 0
    fallthrough
case 1:
    print(1) // print 1
case 2:
    print(2) // Doesn't print
default:
    print("default")
}

Вывод: используйте fallthroughдля выполнения следующего (только одного) случая, когда предыдущий, который имеет fallthrough, совпадает или нет.

Khuong
источник
2

Ключевое слово fallthroughв конце дела вызывает искомое поведение, которое вы ищете, и в одном случае можно проверить несколько значений.

Рассел Борогове
источник