반응형

 Swift 에도 다른 프로그래밍 언어와 마찬가지로 코드를 짤 때 가장 중요한 흐름제어 (Control Flow) 인 

조건문과 반복문이 있다. 

그 중에 조건문에는  IF 문과 Switch 문이 있는데, 각각 Swift 만의 특징을 가지고 있다. 




IF 문

 

 조건문 중에 하나인 IF 문은 평범하게(?) if ~ else if ~ else 로 사용 된다. 

다만 Swift 의 경우 IF 문의 조건을 입력할 때 소괄호 ( )를 생략할 수 있다. 개인적으로는 습관이기도 하고 코드의 구분이 더 

쉬운 것 같기도해서 괄호를 넣는 편이다.

또 한가지 특징이 더 있는데 IF 문의 조건은 무조건 Bool 타입 (true / false) 만 사용해야한다. 

Swift 에서는 true 와 false 를 1 과 0 의 값으로 사용하지 않기 때문이다. 



그림 1 > IF 문 사용법




Switch 문


 조건문으로 Switch 문도 있는데 Swift 의 Switch 문은 특이점이 많다. 그만큼 활용도가 높다는 뜻이기도 하다.

Swift 공식문서에서도 여러가지 Switch 문의 활용 방법을 소개해주고 있는데 각각 다음과 같다.


1. default 사용 


 Swift 의 Switch 문은 조건의 범위를 모두 포함하고 있어야한다. 이게 무슨 말이냐면 조건에 해당하는 범위가 case 에 모두

포함되지 않으면 default 를 추가하여 여기다가 나머지 조건들을 처리해줘야 한다는 것이다.

예를들어 아래의 그림에서 처럼 조건이 알파벳이라고 가정하면 case 에 있는 "a", "b" 이외의 case 상황은 default 를 사용하여 처리해줘야한다.  다른 말로하면 case 에 a~z 까지 모두 있다면 default 는 없어도 된다.



그림 2 > Switch 문의 기본 사용법



2. break 의 생략과 fallthrough


 Switch 문에서 조건에 소괄호 ( )를 생략할 수 있는건 당연하고, case 의 break 생략도 가능하다. 

자바와 비교하자면 자바의 Switch 문 에서는 break 가 없으면 조건에 맞는 case 부터 그 아래에 있는 

case 의 코드들 까지 모두 실행되지만 Swift 에서는 break 가 없어도 자동으로 해당하는 case 의 코드만 실행해 준다. 

그래서 Swift 에서는 조건에 맞는 case 부터 그 아래에 있는 case 코드들 까지 모두 실행 하려면 fallthrough 를 입력해줘야 한다. 





그림 3 > Switch 문 fallthrough 사용법



3. 범위 연산자 사용


 Swift 의 Switch 문은 case에 범위 연산자도 사용할 수 있다. 그리고 case 에는 비교값을 여러개 넣을 수도 있다.



그림 4 > Switch 문의 범위연산자 사용과 여러 값 비교 법



4. 튜플 (Tuples) 사용과 값 바인딩

 

 Switch 문의 case 에는 튜플도 사용이 가능한데 여기서 끝이 아니라 튜플안에 들어있는 값 대신에 와일드 카드패턴( _ ) 

까지 사용할 수있다. 와일드 카드패턴 이란 언더 바 ( _ ) 를 사용하여 어떤 값의 자리를 대신 채워주는 것이다. 

대신 해당 값 자체는 무시한다.(Swift 에는 와일드 카드패턴 이외에도 다양한 패턴이 존재한다.)

값 자체를 무시하기 때문에 무시된 어떠한 값을 사용할 수 없는 불편함이 있다... 

그래서 이를 해결하기 위해 값 바인딩을 사용하면 된다!

값 바인딩 이란 별건 아니고 와일드 카드 패턴 ( _ ) 대신에 상수를 선언하듯이 [ let 변수명 ] 을 넣어줘서 해당 값까지 사용할 수 있도록 하는 것이다.


그림 5 > Switch 문에서 튜플 사용과 값 바인딩



4. Where 


  Swift 의 Switch 문에서 가장 특이한 점은 Where 을 사용할 수 있다는 것이다. 

Where 은 우리가 sql 쿼리를 사용할 때 보던 것과 비슷한데 case 에 조건을 추가하고 싶을 때 사용할 수 있다.

사용하기에 따라 다양하게 활용할 수 있을 것 같다.



그림 6 > Switch 문에서 Where 의 사용법







* 해당 포스팅은 스위프트(Swift)4  버전을 기준으로 하고 있습니다.

* 참고 : https://swift.org/ 


반응형

'IT 정보 로그캣 > Swift' 카테고리의 다른 글

[Swift 공부] 함수  (0) 2018.12.15
[Swift 공부] 반복문  (0) 2018.11.11
[Swift 공부] 기본 연산자  (0) 2018.11.04
[Swift 공부] 컬렉션 타입이란 ?  (0) 2018.11.03
[Swift 공부] 튜플(Tuple)이란?  (0) 2018.10.28

+ Recent posts