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


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.


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, совпадает или нет.


2

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.