언래핑에 대한 기초적인 내용을 확인하시려면 여기를 클릭해주세요.
Unwrapping guard let
guard
문은 뭔가를 검사하여 그 다음에 오는 코드들을 실행할지 말지 결정 하는 것 입니다. guard
문에 주어진 조건문이 거짓일 때, 여기에 달려 있는 코드블럭이 실행됩니다.
조건식에 이 함수가 수행하는데 필요한 조건을 그대로 나타낸다는 점에서 if문에서 부정적인 조건식으로 표현하는것보다 가독성이 높은 장점 있습니다. if
문과 다르게 else
를 항상 달아야 합니다.
아래 함수는 nil
입력을 가드한다는 뜻이고, 만일 입력이 nil
이면 guard
문은 else
절을 수행하고 다른 구문이 수행되기 전에 함수를 return
합니다.
func guardInFunc (string: String?) {
guard string != nil else { return }
print(string!, "second param", separator: "")
}
guardInFunc("test")
guardInFunc(nil)
If let
의 대안은 guard let
이며 unwrapping 옵셔널도
이에 해당합니다. guard let
은 우리를 위해 언래핑 되지만, 내부에서 nil
을 찾으면 사용한 함수, 루프 또는 조건을 종료할 수 있습니다.
guard let
도 if let
과 비슷하지만 다른 점이 있습니다.
guard
라는 것은 지키다 라는 뜻처럼, guard
문은 특성상 함수(메서드)에서만 쓰이며, guard
구문의 조건을 만족하지 못하면 else
문으로 빠져서 함수의 실행을 종료 시킬 때 사용합니다.
즉, 이런식으로 가드하는 것이죠.
"이 조건 만족 못하면 내 함수에서 나가!"
조건을 만족하지 못하면 내쳐버리는 것이 바로 guard
문의 특징입니다. 따라서 guard
구문은 else
와 쌍으로 다닙니다. 왜냐하면 조건 못지키면 else
에서 return
을 사용해야 하기 때문이죠.
if let
과 guard let
의 주요 차이점은 unwrapping 옵셔널도
이 guard
코드 후에도 계속 사용할 수 있다는 것입니다
예를들어, greet()
함수를 사용해 보겠습니다.
이것은 optional string
을 유일한 매개 변수로 받아들이고 그것을 unwrap
할 것입니다. 그러나 그 안에 아무것도 없으면 메시지를 출력하고 빠져나올 것입니다.
가드를 사용하여 unwrapping 옵셔널도
은 gurad
가 끝난 후에도 머물러 있기 때문에 함수 끝에 unwrapping
된 문자열을 인쇄 할 수 있습니다.
func greet(_ name: String?) {
guard let unwrapped = name else {
print("You didn't provide a name!")
return
}
print("Hello, \(unwrapped)!")
}
guard let
을 사용하면 하면 함수 시작시 문제를 처리 한 다음 즉시 종료 할 수 있습니다.
예시
func double(number: Int?) -> Int? {
guard let number = number else {
return nil
}
return number * 2
}
let input = 5
if let doubled = double(number: input) {
print("\(input) doubled is \(doubled).")
}
func add3(to number: Int) -> Int {
guard let number = number else {
return 3
}
return number + 3
}
guard let added = add3(to: 5)
print(added)
잘못된 예시
func playScale(name: String?) {
guard let name = name {
return
}
print("Playing the \(name) scale.")
}
playScale(name: "C")
//guard let 뒤에 else가 빠졌다.
가드 TEST문제를 풀려면 이곳을 클릭해주세요.
읽어주셔서 감사합니다🤟
'SWIFT > Grammar' 카테고리의 다른 글
Swift : 기초문법 [DispatchQueue란?] (GCD : Grand Central Dispatch) (1) | 2021.06.01 |
---|---|
Swift : 기초문법 [CGSize와 CGRect의 차이점과 CGPoint] (0) | 2021.04.04 |
Swift : 기초문법 [클래스 - Class] (0) | 2021.03.01 |
Swift : 기초문법 [프로퍼티 #4-1 Static] (0) | 2021.03.01 |
Swift : 기초문법 [기본 연산자] (0) | 2021.03.01 |