[ Swift ] if, guard, switch문 사용방법
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 사용 불가한 플랫폼에 대한 처리>
}