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"?

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
}

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

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.


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.