정의
- 코드를 안전하게 처리하기 위해 표현식을 검사하는 목적으로 사용합니다.
- 잘못된 값이 전달 될 시에 ( =표현식이 거짓이라면 ) 특정 실행구문을 빠르게 종료하고,
표현식이 거짓이 아니라면 else 블록 밖의 값을 실행 시킵니다
사용
- 옵셔널 바인딩을 하기위한 목적으로 사용됩니다.
- if 문과 다르게, 옵셔널 바인딩한 값을 메서드 내에서 지역변수처럼 사용할 수 있습니다.
- 타입캐스팅과도 자주 사용됩니다.
- 디버깅 모드 뿐만 아니라 어떠한 조건에서도 동작합니다.
형식
guard <표현식> else {
// 표현식이 거짓일 경우 실행될 코드
// 탈출 구문
}
// 표현식이 참일 경우 실행될 코드
예제 1
- 함수를 통한 guard문 예제입니다.
- age의 값이 0~120 사이의 정수이기 때문에 else문 블록 밖에 구문이 출력됩니다.
- age의 값이 옵셔널 바인딩 된 상태로 출력된 것을 확인 할 수 있습니다.
func myTest(age: Int?){
guard let myAge = age,
myAge < 120,
myAge >= 0 else{
print("잘못된 값이 입력되었습니다.")
return
}
print("당신은 \(myAge)세 입니다. ")
}
myTest(age: 24)
실행결과
// 당신은 24세 입니다.
- 이번엔 age의 값이 범위 밖 즉, 거짓으로 판단될 때에 실행결과입니다.
- else문 블록 안의 구문이 출력되었습니다.
func myTest(age: Int?){
guard let myAge = age,
myAge < 120,
myAge >= 0 else{
print("잘못된 값이 입력되었습니다.")
return
}
print("당신은 \(myAge)세 입니다. ")
}
myTest(age: 121)
실행결과
// 잘못된 값이 입력되었습니다.
예제 2
- 이번엔 타입캐스팅이 포함된 guard 문에 대해 알아보겠습니다.
- 첫 번째 guard문을 보면 name의 타입이 String 타입으로 다운캐스팅 가능할 때, 다음 guard문을 진행하게
작성되었습니다. 만약 타운캐스팅이 불가능하다면 return이 실행되어 구문에서 탈출되며 실행이 종료될 것입니다.
- 두 번째 guard문을 보면 age의 타입이 Int 타입으로 다운캐스팅 될 때, name과 age 상수를 출력하게 코드가
작성되었습니다. 만약 다운캐스팅이 되지 않는다면, return을 만나 구문이 종료되었겠죠?
- 실행해보면 입력되는 값이 정상적으로 출력됨을 확인 할 수 있습니다.
func myTest(info: [String: Any]){
guard let name = info["name"] as? String else{
return
}
guard let age = info["age"] as? Int, age >= 0 else{
return
}
print("\(name) : \(age)")
}
myTest(info: ["name": "SeaGreen", "age": 24])
실행결과
// SeaGreen : 24
- guard 문은 많이 사용된다고 하니, 유연하게 사용할 수 있도록 학습하면 좋을 것 같습니다 :)
내용출처
'iOS > Swift 문법 심화 학습' 카테고리의 다른 글
값 타입과 참조 타입 (0) | 2022.01.31 |
---|---|
extensions (0) | 2022.01.30 |
assert (0) | 2022.01.28 |
Initializer (0) | 2022.01.27 |
타입캐스팅 (0) | 2022.01.26 |
댓글