옵셔널 바인딩은, "선택적 결합"으로 "옵셔널을 열어봤는데 값이 들어있으면 이 변수에 할당한다"로 해석
옵셔널을 깠는데 nil일 경우 guard let은 else이 꼭 필요하고 else로 감, if let은 else가 꼭 필요없고 else가 있으면 else로 감
옵셔널을 안전하게 처리하는 방법입니다. → 옵셔널 값은 랩에 쌓여있어 사용시 언래핑 과정이 필요
var pocketMoney: Int? = 300 // 옵셔널 변수
if let unwrappedPocketMoney = pocketMoney { // (A)
pocketMoney = unwrappedPocketMoney + 100 // (B)
} else {
print("pocketMoney가 nil이면 이 문구가 출력된다.") // (C)
pocketMoney = 100
}
(A)의 pocketMoney(옵셔널 변수)
nil일 경우
else문안의 (C)코드가 실행
nil이 아닐 경우
옵셔널 열어봤는데 nil이 아니므로 unwrappedPocketMoney 변수에 할당된다.
그 후, (B) 코드가 실행된다.
이때, unwrappedPocketMoney 변수는 If문 내부의 스코프에서만 사용이 가능
if문밖의 스코프에선 unwrappedPocketMoney 존재하지 않는다.
하나의 if문에 여러개의 옵셔널 바인딩을 할 수 있다.
if는 else가 반드시 필요하진 않음.
func downloadImage (from url: URL?) {
guard let url = url else {
print("url is nil. url not found!")
return
}
print("url is not wrapped with optional here: \(url)"
beginDownload(url: url)
}