Swift의 Exhaustive Switch 문에 대한 Noop


88

Swift에는 철저한 switch 문이 필요하며 각 케이스에는 실행 가능한 코드가 있어야합니다.

'switch'의 'case'레이블에는 실행 가능한 문이 하나 이상 있어야합니다.

실제로 아무것도하고 싶지 않은 경우를 처리 할 수있는 좋은 방법을 결정한 사람이 있습니까? 거기에 println ()을 넣을 수는 있지만 더럽습니다.


답변:


150

에 따르면 break거기 에서 사용해야 합니다.

각 케이스의 범위는 비워 둘 수 없습니다. 따라서 각 케이스 레이블의 콜론 (:) 뒤에 최소한 하나의 명령문을 포함해야합니다. break일치하는 케이스의 본문에서 코드를 실행하지 않으려면 단일 문을 사용하십시오 .


8
오, 다시 스위프트는 최소한의 놀라움의 법칙을 깨뜨립니다. :)
Sulthan

10
@Jiaaro에 대한 필요성 break은 가지가없는 가지 가 실패 할 수 있음 을 나타냅니다 break.
RnMss 2014 년

4
간단한 ()wokrs도 있습니다. 그럼에도 불구하고 나는 break그것이 일을 더 명확하게 만드는 것을 선호합니다 . fallthroug문을 통과 하려면 키워드 를 사용하십시오 .
cLar 2014 년

1
default:경우에 해당하는 유일한 줄을 간단히 주석 처리하고 싶을 때 매우 성가신 일 입니다. 그것은 좋은 것 같지 않습니다. 나는 또한 그것이 Swift가하는 일이 아닌 행동을 통한 c의 실패를 암시한다는 데 동의합니다.
Benjohn

1
그리고 .. 여기 와서 그냥 휴식 일찍 바깥 쪽 루프를 종료하지 않을 것을 확인했다
JulianSymes

12

break문을 사용할 수 있습니다 .

let vegetable = "red pepper"
var vegetableComment: String = "Nothing"
switch vegetable {
case "cucumber", "watercress":
    break // does nothing
case let x where x.hasSuffix("pepper"):
    vegetableComment = "Is it a spicy \(x)?"
default:
    vegetableComment = "Everything tastes good in soup."
}

문서 에서 수정 된 예


3

다음은 null 문에 대한 한 가지 옵션이지만 좋은 솔루션이 아닐 수도 있습니다. 파이썬 패스와 같은 문을 찾을 수 없습니다.

{}() 

스위치 케이스의 경우 휴식이 더 나은 선택입니다.

break

0

내가 찾은 가장 깨끗한 해결책은 단순히 스위치 케이스에 마지막 진술을 기본값으로 포함하는 것입니다. 이렇게하면 break가능한 모든 경우를 처리하면서 추가 또는 기타 불필요한 문 을 추가 할 필요가 없습니다.

예를 들면 :

switch myVar {

case 0:
    myOtherVar = "Red"

case 1:
    myOtherVar = "Blue"

default:
    myOtherVar = "Green"

}

1
안녕하세요 @scottyhardy. 이것은 정말로 질문의 요점이 아닙니다. "빈 기본 케이스를 추가하는 것을 피하는 방법"(또는 그 라인을 따라 무언가)이라는 질문에 대한 답을 썼습니다. 귀하의 경우에는 실제로 모든 경우에서 무언가를하고 있습니다. 하지만 아무 것도하고 싶지 않은 경우 (예를 들어 2 번과 같은)가 있다고 가정 해 봅시다. 그런 경우에는 같은 질문으로 돌아갑니다. 뭐라도할까요? 간단히 말해서 휴식을 사용하십시오.
Enricoza

0

break다른 답변에서 언급 한 것 외에도 ()no-op 문으로 사용되는 것을 보았습니다 .

switch 0 == 1 {
case true:
    break
case false:
    ()
}

혼란 스럽거나 3자를 저장하려는 ()경우 사용하십시오 break.

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