Swift

[ Swift ] if, guard, switch문 사용방법

박빅백 2020. 9. 29. 09:22

1. if

2. guard

3. switch

 

1 - if

if<조건식>{

//...

해당 조건에 맞으면 블럭내의 구문(//...)을 실행합니다.

else if, else 문 사용방법 또한 다른언어와 유사하기 때문에 이정도 정리하고 넘어가겠습니다.

 

2 - guard

 

guard <조건식 또는 표현식> else{

 <조건식 또는 표현식 결과가 false일 때의  코드>

}

형식으로 작성된다.

 

 if 문과의 차이점으로는 else구문이 반드시 필요하다는 점. 참일때의 실행코드블럭이 없다.

 guard구문은 후속 코드가 실행되기 전 조건을 만족하는지 확인하는 용도로 쓰입니다. 특정 조건을 만족하지 않고 후속코드를 실행하지 못하도록 오류발생을 예방하는 코드로 사용됩니다. 

 

 장점 

 1> 코드의 중첩을 막아준다.

 2> guard구문을 많이 사용해도 코드의 depth가 깊어지지 않는다.

import Foundation
func divide(number: Int){
	guard number != 0 else{
    	print("0으로 나눌 수 없습니다.")
        return
    }
    let result = 100/number
    print("\(result)")
}
divide(number: 0)

 예제를 통해 정리해보면 결과는 "0으로 나눌 수 없습니다."가 출력됩니다. guard 조건이 0인 경우 false이기 때문에 블럭내부 구문이 실행되고 종료됩니다. 조건이 반대이다 보니 주의해서 사용해야 될 것 같습니다.

 

3 - switch

switch <비교대상>{

            case<비교패턴1>:

                   <수행코드1>

            case<비교패턴2>:

                   <수행코드2>

           default:

                   <비교패턴들과 일치하지 않을 때 수행 코드>

}

형식은 다른 언어와 유사하지만 swift에서 switch의 다른점은 일치하는 case문에서 코드를 수행하면 해당 분기문은 break가 없어도 종료된다는 것입니다.

let sampleChar : Character = "a"

switch sampleChar{
	case "A":
    		print("글자는 A입니다.")
	case "a":
    		print("글자는 a입니다.")
	default:
    		print("일치하는 글자가 없습니다.")
}

swift의 switch문은 모든 조건을 만족할 수 있는 분기(case)를 만들지 않으면 반드시 default블럭을 작성해주어야 합니다.

var value = (5,4)
switch value{
	case let(x, 3):
	print("x값이 \(x)이고 y값이 3인 튜플")
    	case let(3, y):
	print("x값이 3이고 y값이 \(y)인 튜플")
	case let(x, y):
	print("x값이 \(x)이고 y값이 \(y)인 튜플")
}

 위의 예제의 경우 모든 조건을 만족하는 switch문을 작성했기 때문에 default블럭을 생략해도 오류가 나지 않습니다. 하지만 만족하지 않는 구문의 경우 오류가 발생합니다.

 

var value = (3, -3)

switch value{
	case let (x,y) where x==y:
    	print("\(x)와 \(y)는 x==y 선상에 있음")
	case let (x,y) where x==-y:
    	print("\(x)와 \(y)는 x==-y 선상에 있음")
	case let (x, y):
	print("\(x) \(y)는 일반좌표상에 있음")
 }

 

4 - #available

ios 버전에 따라 API를 제공하는 경우 앱에서 제한을 두거나 다른  API를 사용하도록 분기를 타게 만드는 경우 사용하는 구문입니다.

 

if #available(<플랫폼 이름 버전>,<...>,<...>){

   <해당 버전에서 사용가능한 API 구문들>

}else{

   <API 사용 불가한 플랫폼에 대한 처리>

}