switch구문
입력받은 값을 조건식 여부가 아니라 패턴으로 비교, 그 결과를 바탕으로 실행 블록을 결정하는 조건문.
나열된 패턴들을 순서대로 비교하다가 일치하는 첫번째의 코드 불록을 실행.
switch <비교대상> {
case <비교패턴1> :
<비교패턴1이 일치했을 때 실행할 구문>
case <비교패턴2>, <비교패턴3> :
<비교패턴2 또는 3이 일치했을 때 실행할 구문>
default :
<어느 비교 패턴과도 일치하지 않았을 때 실행할 구문>
}
case 비교 패턴 어느 것과도 일치하지 않았다면, 맨 마지막에 작성된 default구문의 코드가 실행된다.
일치하는 비교 패턴이 있을 경우, 해당 블록의 실행코드를 처리하고, 더 이상의 비교 없이 전체 분기문을 종료.
설사 일치하는 비교 패턴이 여러개 있더라도 맨 처음 일치하는 case구문 하나만 실행.
오직 하나의 case구문만 처리하고 나면 더 이상 비교를 진행하지 않음.
다른 언어에서는 원래 각 case키워드 블록마다 break 추가 해야하는데, 스위프트에서는 생략 가능한건 이 때문임.
let val = 2
switch val {
case 1 :
print("일치한 값은 1회입니다.")
case 2 :
print("일치한 값은 2회입니다.")
case 2 :
print("일치한 값은 2가 더 있습니다.")
default :
print("어느 패턴과도 일치하지 않았습니다.")
이 경우 밑에 case 2 역시 일치하는 패턴이지만, 실행되지 않은 채로 조건문 종료.
이는 일치하는 비교패턴 하나만 실행한 다음 종료하는 스위프트의 스위치 구문 특성 때문.
*명시적인 fallthrough구문만 지원 (암시 x)
*switch구문에 사용된 비교 대상은 반드시 하나의 비교 패턴과 일치해야 함.
모든 case구문에서 일치된 패턴을 찾지 못했을 경우에 대비하여 switch구문에는 반드시 default를 추가해야함. 만약 생략하면 완전하지 않은 구문으로 간주하여 오류 발생.
단, default 구문을 대신하여 모든 패턴을 매칭시킬 수 있는 구문이 존재하는 경우에 한하여 default구문 생략할 수 있다.
*case 비교 패턴 작성시, 하나의 case 키워드 다음에 하나 이상의 비교 패턴을 연이어 작성 가능.
case 0, 1: 이런식으루.
*case 구문에서 사용되는 비교패턴으로, 단순히 서로 다른 패턴들 외에 튜플이나 특정 타입으로 캐스팅된 객체도 사용 가능.
switch구문에서 튜플 내부의 아이템이 비교 대상과 부분적으로 일치할 경우, 스위프트는 case 구문의 비교 패턴 전체가 일치하는 것으로 간주.
이 때 일치하지 않는 나머지 부분을 상수나 변수화하여 사용 가능. p222
출처: 꼼꼼한 재은씨의 swift 문법편 p216-
'iOS > iOS Swift 문법' 카테고리의 다른 글
iOS swift <집단자료형> - 배열 (0) | 2022.06.03 |
---|---|
iOS swift 제어전달문 (4가지) / 구문레이블 (0) | 2022.06.03 |
iOS swift #available 구문 (0) | 2022.06.03 |
iOS swift guard구문 (0) | 2022.06.03 |
iOS swift A ?? B (0) | 2022.05.28 |