이 글은 주인장의 이해를 돕고 가르치는 사람이 되어봤을 때 어떻게 설명해야할 지 생각하며 쓴 글이다.
피드백은 언제나 환영이야 ! ( 대충 트레이서 )
guard는 조건이 거짓일 때 guard 블록내 코드가 실행되고 함수가 종료되고,
조건이 참일 경우 아래의 코드 블럭이 실행된다.
조건이 거짓일 때 아래 블럭으로 이동하여 다음블럭을 실행하고 참일때 그 함수를 실행하고 탈출하는 if 와 반대의 "성향"을 갖는 코드인 것이다.
하지만 반대의 성향이라고 표현한 것과 같이 완벽하게 반대는 아니니 글을 끝까지 읽는 것을 추천한다.
기본적인 guard 문의 코드 형식
guard 조건 else {
//코드가 거짓일 때 실행 되는 코드
}
//코드가 참일 때 실행 되는 코드
guard 문은 코드의 흐름을 제어하는 역할을 한다.
옵셔널 변수에서 안전하게 값을 추출할 때 사용한다.
guard let nonOptionalValue = optionalValue else {
// optionalValue가 nil일 때 실행
return
}
// nonOptionalValue를 안전하게 사용
옵셔널이 nil이 아닐 때만 언래핑된 값을 안전하게 사용하고,
옵셔널이 nil이면 함수나 흐름을 종료하는 것이 guard let의 핵심이다.
func multiplyByTen(value: Int?) {
guard let number = value else {
print("nil")
return
}
print(number*10)
}
multiplyByTen(value: 3) //30
multiplyByTen(value: nil)
multiplyByTen(value: 10)
이런 경우 nil값이 들어가게 된 경우 다음 코드 블럭을 실행하고 number에 숫자를 넣게 되면 return 과 같은 제어문 반환 명령어 뒤에 코드를 실행하게 된다.
guard let 옵셔널 바인딩을 사용하게 되면 코드가 간결해지며 가독성을 높일 수 있다.
그리고 옵셔널 값을 안전하게 사용할 수 있다.
if는 값이 참일 때 그 코드 블럭을 실행하고 거짓일때 아래 코드 블럭으로 내려가 else문 혹은 elseif를 실행하게 된다.
else문은 if문에 있는 모든 코드 블럭 마지막에만 사용할 수 있고
사이사이에 있는 코드 블럭에만 else if 를 사용할 수 있다.
else를 코그블럭 마지막이 아닌 else if 위에 사용하게 되면 에러 코드를 출력하게 된다.
let number = 10
if number > 5 {
print("5보다 큰 수")
} else {
print("5보다 작은 수")
}
// 출력결과 : 5보다 큰 수
if let은 옵셔널 바인딩을 할 때 사용한다, nil값이 아닐때 값을 안정적으로 추출할 때 사용한다.
let optionalName: String? = "Jea"
if let name = optionalName {
print("이름이 \(name) 입니다.")
} else {
print("값이 없습니다.")
}
- 옵셔널 상수에 Jea 라는 값을 넣어줬다 이 옵셔널 변수는 nil 값과 jea라는 값이 동시 존재할 수 있다는 것이다.
- if let으로 언래핑 한 후 name과 optionalName을 비교하여 값이 있으면 if 문을 출력하고 값이 없을 경우 else문을 출력하게된다.
- 마지막으로 optionalName 에는 jea라는 값이 들어가 있기 때문에 안정적으로 언래핑 된 후 if문이 실행되게 된다.