caso rápido caindo

146

Swift tem queda através de declaração? por exemplo, se eu fizer o seguinte

var testVar = "hello"
var result = 0

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

é possível executar o mesmo código para o caso "um" e o caso "dois"?

Bilal Syed Hussain
fonte

Respostas:

367

Sim. Você pode fazer o seguinte:

var testVal = "hello"
var result = 0

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

Como alternativa, você pode usar a fallthroughpalavra-chave:

var testVal = "hello"
var result = 0

switch testVal {
case "one":
    fallthrough
case "two":
    result = 1
default:
    result = 3
}
Cezary Wojcik
fonte
29
+1 para não apenas mencionar fallthrough, mas sugerindo usar multi-caso
Thilo
3
Este é tal um bom compromisso entre o perigo de queda de C através, ea falta de queda através de, por exemplo, C #
Alexander - Reintegrar Monica
Alguém sabe como passar de um caso para o padrão? case "two", padrão: não será compilado.
Zack Morris
2
Deixa pra lá. Percebi que comentar o caso faz parte do conjunto de casos padrão, portanto: / * case "two", * / default: tem o efeito que estou procurando.
Zack Morris
1
@AlexanderMomchliov C # tem queda explícita #
Ian Newson 16/09
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")
}
Glenn Tisman
fonte
Você conhece uma maneira de passar para o caso padrão?
MarcJames
5
eu concordo com o "caso dois". Para mim, esse comportamento é péssimo. Por que Swift executa o próximo caso, mesmo que não seja verdade? Isso faz com que a instrução switch totalmente inútil ...
Andreas Utzinger
7
case "one", "two":
    result = 1

Não há instruções de interrupção, mas os casos são muito mais flexíveis.

Adendo: Como aponta o Arquivo Analógico, na verdade existem breakdeclarações no Swift. Eles ainda estão disponíveis para uso em loops, embora desnecessários em switchinstruções, a menos que você precise preencher um caso vazio, pois casos vazios não são permitidos. Por exemplo: default: break.

nhgrif
fonte
6

Aqui está um exemplo para você fácil de entender:

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")
}

Conclusão: Use fallthroughpara executar o próximo caso (apenas um) quando o anterior que tiver fallthroughfor igual ou não.

Khuong
fonte
2

A palavra fallthrough- chave no final de um caso causa o comportamento de falha que você está procurando e vários valores podem ser verificados em um único caso.

Russell Borogove
fonte