Swift의 switch 구문

1 분 소요

if-else 구문: 제한된 개수의 조건을 검사
switch 구문: 많은 수의 조건을 처리


프레임


switch 표현식 {
    case 일치하는 값1:
        코드 구문
    
    case 일치하는 값2:
        코드 구문
 
    case 일치하는 값3, 일치하는 값4:
        코드 구문
    
    default:
        코드구문
}

  • 표현식: 값을 나타내거나 값을 반환하는 표현식, switch 구문이 동작하게 하는 값
  • 일치하는 값: 표현식의 값과 일치할 수 있는 값을 case 구문으로 제공, 표현식의 값과 동일한 타입
  • 코드 구문: case 조건과 일치하는 값일 경우에 수행
  • default절: 표현식과 일치하는 case 구문이 없을 경우에 어떻게 해야 하는지 정의(필수!)

예제

let value = 4

switch (value) {
case 0:
    print("zero")

case 1:
    print("one")

case 2:
    print("two")

case 3:
    print("three")

case 4:
    print("four")

case 5:
    print("five")

default:
    print("Integer out of range")
}

case 구문 결합하기

let value = 1

switch (value) {
case 0, 1, 2:
    print("zero, one or two")
     
case 3:
    print("three")
     
case 4:
    print("four")
     
case 5:
    print("five")
     
default:
    print("Integer out of range")
}
  • 서로 다른 매칭(case)에 대해 동일한 코드 실행

switch 구문에서 범위 매칭하기

let temperature = 83

switch (temperature) {
case 0...49:
    print("Cold")

case 50...79:
    print("Warm")

case 80...110:
    print("Hot")

default:
    print("Temperature out of range")
}

where 구문 사용하기

let temperature = 53

switch (temperature) {
case 0...49 where temperature % 2 == 0:
    print("Cold and even")

case 50...79 where temperature % 2 == 0:
    print("Warm and even")

case 80...110 where temperature % 2 == 0:
    print("Hot and even")

default:
    print("Temperature out of range or odd")
}
  • 부가적인 조건을 추가
  • 값이 범위 조건에 일치하는지를 검사할 뿐만 아니라(AND) 그 숫자가 홀수인지 짝수인지도 검사

fallthrough

let temperature = 10

switch (temperature) {
case 0...49 where temperature % 2 == 0:
    print("Cold and even")
    fallthrough

case 50...79 where temperature % 2 == 0:
    print("Warm and even")
    fallthrough
     

case 80...110 where temperature % 2 == 0:
    print("Hot and even")
    fallthrough

default:
    print("Temperature out of range or odd")
}
  • 예외상황 효과 - 하나의 case 문이 거친 뒤, 그 다음 case 문의 내용을 이어서 실행
    • control expression 조건을 충족하지 않아도 됨
  • Swift에서는 case 구문 끝에 break를 쓸 필요가 없다.
    • 다른 언어와는 달리 case 조건에 일치하면 자동으로 구문 밖으로 빠져나감
    • default에서 아무런 작업도 할 필요가 없는 경우 유용
       .
       .
       .
        default:
            break
        }