신속한 사건


146

신속 함이 성명을 넘어서는가? 예를 들어 내가 다음을 수행하는 경우

var testVar = "hello"
var result = 0

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

사례 "1"과 사례 "2"에 대해 동일한 코드를 실행할 수 있습니까?

답변:


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
을 언급 할 fallthrough뿐만 아니라 다중 사례 사용을 제안하여 +1
Thilo

3
이것은 C의 실패 위험과 예를 들어 C #
Alexander-Reinstate Monica의

누구나 사례에서 기본으로 넘어가는 방법을 알고 있습니까? case "two", 기본값 : 컴파일되지 않습니다.
잭 모리스

2
신경 쓰지 마. 케이스를 주석 처리하면 기본 케이스 세트의 일부가된다는 것을 깨달았습니다. / * case "two", * / default : 내가 찾는 효과가 있습니다.
잭 모리스

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
"사례 2"에 동의합니다. 나를 위해이 행동은 짜증납니다. Swift가 사실이 아닌 경우에도 다음 사례를 실행하는 이유는 무엇입니까? 이것은 스위치 문을 완전히 쓸모 없게 만듭니다 ...
Andreas Utzinger

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

break statement는 없지만 사례가 훨씬 유연합니다.

부록 : Analog File이 지적했듯이 breakSwift 에는 실제로 진술이 있습니다. 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사례가 끝날 때 키워드 를 사용하면 찾고있는 대체 행동이 발생하며 한 번에 여러 값을 확인할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.