швидкий випадок, що провалюється


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 #
Олександр - Відновіть Моніку

Хтось знає, як пройти від випадку до дефолту? випадок "два", за замовчуванням: не збирається.
Зак Морріс

2
Не звертай уваги. Я зрозумів, що коментування справи робить його частиною встановлених випадків за замовчуванням, тому: / * випадок "два", * / за замовчуванням: має ефект, який я шукаю.
Зак Морріс

1
@AlexanderMomchliov C # явно провалився
Ian Newson

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
Я погоджуюся з "випадком два". Для мене така поведінка смокче. Чому Свіфт виконує наступний випадок, навіть якщо це неправда? Це робить заяву перемикання абсолютно марною ...
Андреас Утцінгер

7
case "one", "two":
    result = 1

Немає заяв про перерви, але справи набагато гнучкіші.

Додавання: Як вказує аналоговий файл, 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.