"break" 키워드를 작성하지 않고 해당 case가 진행되면 자동으로 switch 구문이 종료됩니다.
다른 언어의 경우 대부분 switch문에서 해당 case의 내부 코드가 실행된 후 break문이 없을 경우 멈추지 않고 다음 case가 계속 실행되지만, swfit에서는 해당 조건의 case문 내에 코드를 실행하고 나면 break문이 없어도 switch 구문이 자동으로 종료됩니다.
switch 입력 값 { // 소괄호"()" 생략 가능
case 값1 :
//~~~ 내부 코드1 ~~~
// 입력 값이 값1가 나올 경우 내부 코드1 실행 후 switch 구문 종료
case 값2 :
//~~~ 내부 코드2 ~~~
break // break를 작성하여도 무관 (선택사항)
// 입력 값이 값2가 나올 경우 내부 코드2 실행 후 switch 구문 종료
default:
//~~~ 내부 코드3 ~~~
// 입력 값이 case에 해당하지 않을 경우 실행
}
☝🏻 입력 값에 정수 이외 튜플, 열거형 등 다양한 타입 대입 가능!!
fallthrough 를 선언하여 해당 구문 실행 후 다음 case를 연속으로 실행 가능합니다
var a:Int = 3
switch a { // 소괄호"()" 생략 가능
case 1 : print("case1 실행")
fallthrough
case 2 : print("case2 실행")
}
== 출력값 ==
case1 실행
case2 실행
추가로 switch문 내부에서는 입력 값에 들어올 수 있는 모든 경우의 수를 다루어야 합니다. 그러지 않을 경우 오류가 발생할 수 있으므로 해당 입력값이 한정되지 않을 경우에는 default를 통해 나머지 예외처리를 할 케이스가 반드시 있어야 합니다.
var number = 2
switch number { // 문자열
case 1:
print("숫자 : 1")
case 2:
print("숫자 : 2")
}
//default값이 없는 경우
위와 같이 모든 경우에 수를 다루지 않은 상황에서 default값이 없는 경우 경고문이 출력됩니다
- case 조건식으로 지정하기
- 범위 연산자를 활용한 switch문
- (번외) if문에서 범위 값 활용 방법
switch문 조건을 통해 확인하고 싶은 경우에는 다른 상수(혹은 변수) 값에 바인딩한 후 조건절(where)을 통해 확인을 할 수 있습니다.
var num = 3
switch num {
case let x where x % 2 == 0: // let x = num << 이처럼 상수를 선언해 바인딩한 후 조건절로 확인
print("짝수") // 변수(var)도 가능
case let x where x % 2 != 0:
print("홀수") // "홀수" 출력
default:
break
}
var score: Int = 78
switch score {
case ..<25: // 25미만일 경우 "F"
print("학점은 F입니다.")
case 25..<40: // 25이상 40미만일 경우 "E"
print("학점은 E입니다.")
case 40..<55: // 40이상 55미만일 경우 "D"
print("학점은 D입니다.")
case 55..<70: // 55이상 70미만일 경우 "C"
print("학점은 C입니다.")
case 70..<85: // 70이상 85미만일 경우 "B"
print("학점은 B입니다.")
case 85...: // 85이상일 경우 "A"
print("학점은 A입니다.")
default:
print("점수가 입력되지 않았습니다.")
}
// 출력 결과 : 학점은 B입니다.
if문에서 범위값을 활용하고 싶은 경우 아래와 같이 &&를 통해 작성도 가능하지만 패턴매칭 연산자를 통해 비교 가능합니다.
패턴매칭 연산자는 "~="를 통해 나타내며 사용 방법은 아래와 같습니다.
if number >= 3 && number <= 5 { // 3~5 사이의 숫자일 경우 true 출력
print("true")
}else {
print("false")
}
if 3...5 ~= number { // 범위시작값...범위끝값 ~= 입력값 << 이와 같이 표현
print("true")
}else {
print("false")
} //위와 결과 동일