Switch문
//Syntax
switch valueExpression {
case pattern:
statements
case pattern, pattern:
statements
default:
statements
}
switch문을 쉽게 풀어서 설명해보자.
valueExpression에서 선언된 값과 각각의 case들을 매칭시킨다.
그래서 값이 같다면, 해당 case에 있는 코드를 실행.
같지 않다면, 다음 case로 이동.
switch문에서는 모든 케이스를 매칭해야 한다.
그래서 case들에 매칭을 하고, 남은 다른것들은
default에서 처리한다.
if문의 else와 같은 역할이라고 보면 된다.
두번째 case를 보자.
여러개의 패턴과 매칭시킬수도 있다.
이때는 &&(and)가 아닌 ||(or)이기 때문에 둘중의 하나만 매칭되어도 true로 판단한다.
swift문에서 statements들은 비워둘 수 없다.
그래서 만약 default일때, 별다른 코드를 실행시키고 싶지 않다면,
break를 작성해서 switch문을 끝내면 된다.
예시를 보자.
let num = 3
switch num {
case 1:
print("one")
case 2, 3:
print("two or three")
default :
break
}
Interval Matching
let temperature = Int.random(in: -10 ... 30)
switch temperature {
case ...10:
print("Cold")
case 11...20:
print("Cool")
case 21...27:
print("Warm")
case 28...:
print("Hot")
default:
break
}
Fall Through
Swift에서 switch문을 사용할때, 값과 case가 매칭되었다면, 해당 case에 있는 코드를 실행하고 switch문은 바로 종료된다.
다른 언어에서는 switch문의 마지막에 break문을 추가해야하는데, Swift에서는 사용하지 않는다.
let baechu = "Baechu"
switch baechu {
case "Baechu":
print("배추는 그린퀘이커 앵무새")
case "mungchi":
print("뭉치는 블루오파린퀘이커 앵무새")
default:
print("그런 이름의 앵무새는 없습니다.")
}
위의 코드를 보자.
첫번째 case에서 매칭되었기 때문에, 두번째 케이스는 실행시키지 않고 switch문은 그대로 종료된다.
하지만 이 때 fall through를 사용하면 어떻게 될까?
switch baechu {
case "Baechu":
print("배추는 그린퀘이커 앵무새")
fallthrough
case "mungchi":
print("뭉치는 블루오파린퀘이커 앵무새")
default:
print("그런 이름의 앵무새는 없습니다.")
}
//출력
//"배추는 그린퀘이커 앵무새"
//"뭉치는 블루오파린퀘이커 앵무새"
fallthrough를 사용하면, switch문을 종료하고, 다음 case의 코드를 실행한다.
하지만 이때 주의사항이 있는데, 다음 case의 매칭 여부를 따지지 않고, 그냥 바로 코드를 실행한다.
때문에 코드에 따라서 fallthrough를 사용하면 코드를 간결하게 작성할 수 있지만, 버그가 발생할 수도 있다.
fallthrough를 사용해 코드를 간결하게 작성한 예시를 한번 보자.
- 로그인 실패 횟수를 기록해서, 5번 미만의 경우에는 경고를 보내고,
- 로그인 실패 횟수 5번 일시 계정이 잠겼다는 메시지를 출력 후, 경고 메일을 보냈다는 메시지를 출력한다.
- 그리고 5번 이상일 경우 경고 메일을 보냈다는 메시지를 출력한다.
let triedlogin = 5
switch triedlogin {
case ...4:
print("warning")
case 5:
print("account is locked")
print("warning message sended")
default:
print("warning message sended")
}
fallthrough를 쓰기 전.
두번째 케이스와 default에 동일한 코드가 있기 때문에, 코드가 간결하지 않다.
이때 fallthrough를 사용한다면,
let triedlogin = 5
switch triedlogin {
case ...4:
print("warning")
case 5:
print("account is locked")
fallthrough
default:
print("warning message sended")
}
코드의 중복을 없애면서도, 로그인 시도횟수가 5회 일때 계정이 잠겼다는 메시지와 함께 경고 메일을 전송했다는 메시지도 출력할 수 있다.
'Language > Swift' 카테고리의 다른 글
Swift 기본 분법 - 반복문 (for문, while문) (0) | 2024.10.20 |
---|---|
Swift 기본 문법 - Range Operator(범위 연산자) (0) | 2024.10.19 |
Swift 기본 문법 - 조건문 guard문 (0) | 2024.10.15 |
Swift 기본 문법 - 조건문 if문 (2) | 2024.10.14 |
Swift 기본 문법 - 할당 연산자(Assignment Operator) (0) | 2024.10.14 |
살아남는 iOS 개발자가 되기 위해 끊임없이 노력하고 있습니다.