2021.07.01 - [프로그래밍/iOS] - [Swift] if let vs guard let (기본편)
안녕하세요~ 차니에요!
기본편을 안보고 오신 분들은 이해하는데 어려움이 있을 수 있으니 먼저 보고 오시는걸 추천드릴게요!
기본편에 이어서 오늘은 조금 더 심화된 내용을 알아보도록 할거에요~
지난 시간에 guard else에는 상위 코드 블럭을 종료하는 함수가 반드시 필요하다고 말씀드렸는데 이 부분을 다뤄볼게요.
1. continue / break
continue와 break는 반복문에서 쓸 수 있는 예약어이죠?
let channyfarm: Array<String> = ["dog", "cat", "chicken", "cow", "pig"]
차니 농장에서 동물을 찾아볼게요!
func findAnimal(kind: String) {
for anim in channyfarm {
guard anim == kind else {
print("얜 아니야 ... continue \(anim)")
continue
}
guard anim != kind else {
print("찾았다!! ... break \(anim)")
break
}
}
}
동물 종류를 인자로 받아서 배열을 순회하며 해당 동물을 찾는 예제입니다.
저는 농장에서 "cow"를 찾아보겠습니다.
guard는 조건문이 false이면 else문이 실행된다고 했었는데요.
- anim == kind → false
- 동물을 못 찾은 것이므로 continue를 호출해서 계속해서 찾도록 했습니다.
- anim != kind → false
- 동물을 찾은 것이므로 break를 호출하여 찾는 것을 멈췄습니다.
2. return
func findAnimal(kind: String) {
guard channyfarm.contains(kind) else {
print("농장에 없는 동물이에요..")
return
}
print("찾으시는 동물이 농장에 있어요!")
}
이번에도 마찬가지로 농장에서 동물을 찾아볼거에요.
findAnimal(kind: "dog")
위 코드의 실행 결과는 어떻게 될까요?
findAnimal(kind: "rion")
이 경우에는 어떻게 될까요?
3. throws
이번에도 마찬가지로 농장에서 동물을 찾아볼건데 문자 그대로 throws를 통해 오류를 던져볼게요!
enum TestError: Error {
case notFound
}
func findAnimal(kind: String) throws {
guard channyfarm.contains(kind) else {
throw TestError.notFound
}
print("찾으시는 동물이 농장에 있어요!")
}
do {
try findAnimal(kind: "tiger")
} catch TestError.notFound {
print("농장에 없는 동물이에요..")
}
guard문 조건을 통해 농장에 해당 동물이 없다면 TestError.notFound를 던지고 do-catch문에서 처리하는 코드입니다.
실행 결과는 당연히 2번과 동일하게 나옵니다!