switch문
입력받은 값을 조건식 여부가 아니라
패턴으로 비교하고 그결과를 바탕으로 실행 블록을 결정하는 조건문
<switch문 구조>
switch<비교 대상>{
case <비교 패턴1> :
<비교 패턴1이 일치했을 때 실행할 구문>
case <비교 패턴2>,<비교 패턴3> :
<비교 패턴2 또는 3이 일치했을때 실행할 구문>
default :
<어느 비교패턴과도 일치하지 않을때 실행할 구문>
}
- 비교 대상과 비교패턴이 일치하면 구문을 실행하고 나머지 case를 비교하지 않고 switch 구문을 종료함
(이유: 각 case 키워드 블록마다 추가해야 하는 break 구문을 스위프트에서는 생략하기 때문)
- 비교 패턴이 일치하는것이 없으면 default 구문 실행
( 비교대상은 반드시 하나의 비교패턴과 일치해야함)
<switch문 예제>
결과)
2로 초기화한 val 상수는 switch구문에서 7행에 있는 구문 출력 후switch 구문을 나가게 됨
두 가지 이상의 패턴에 대해 같은 구문을 실행해야 한다면,
하나 이상의 비교패턴을 연이서 작성 할 수 있음
var value =3
switch value{
case 2,3 :
print("2 또는 3 입니다.")
default :
print("디폴트입니다.")
}
case구문에서 사용되는 튜플이나 특정 타입으로 캐스팅된 객체도 사용할 수 있음
*튜플(Tuple) 집단 자료형 - 괄호로 묶인 이형 집단 데이터
switch 구문에서 튜플 내부의 아이템이 비교 대상과 부분적으로 일치할 경우,
스위프트는 case구문의 비교 패턴 전체가 일치하는 것으로 간주함
이때, 일치하지 않는 나머지 부분을 상수나 변수화해서 사용할 수 있음
결론
1. (x,3)
부분적으로 일치함
따라서 콘솔창에 출력된 것을 볼 수 있음
2.(3,y)
부분적으로 일치함
하지만 스위프트 특성상 이미 (x,3)라는 일치하는 비교 패턴이 있으므로 switch문을 나가게 되어 출력이 안됨
3.(x,y)
변수로 처리된 부분은 어떤 값이든 들어올 수 있다는 의미로 조건 비교상으로 성립하는 구문임
하지만 스위프트 특성상 이미 (x,3)라는 일치하는 비교 패턴이 있으므로 switch문을 나가게 되어 출력이 안됨
case 구문은 범위 연산자를 사용할 수 있다.
<글이 작성된 시간(초)을 범위에 따라 그룹지어 표현해주는 구문>
var passtiome = 1995
switch passtime{
case 0..<60 :
print("방금 작성된 글입니다")
case 60..<3600 :
print("조금 전 작성된 글입니다")
case 3600..<86400 :
print("얼마 전 작성된 글입니다")
default :
print("예전에 작성된 글입니다")
}
//실행결과
조금 전 작성된 글입니다
튜플형식을 비교하고 where구문을 추가하면 case 블록별로 보다 복잡한 패턴까지 확장하여 매칭할 수 있음
해석)
비교 대상으로 사용된 point 변수는 switch구문의 case 블록에서 각각(x,y)로 할당되고,
이 임시 변수들은 다시 where 구문에서 조건 비교에 사용됨
이를 통해 case 블록이 실행됨
'Swift랑 친해지기 > Swift 책보면서 정리해보기' 카테고리의 다른 글
집단 자료형 4가지, 파운데이션 프레임워크 - 스위프트 (0) | 2022.01.18 |
---|---|
제어 전달문 (break , continue, fallthrough, return) - 스위프트 (0) | 2022.01.18 |
guard 구문 - 스위프트 (0) | 2022.01.17 |
if조건문 - 스위프트 (0) | 2022.01.17 |
while 반복문 - 스위프트 (0) | 2022.01.17 |