Swift에서는 값이 없을수도 있는 옵셔널을 막 갖다 사용하려고 하면 노란색이나 빨간색으로 오류가 뜬다. 안전성을 위해 웬만해서는 강제 언래핑을 하지 않고 옵셔널 바인딩을 통해 언래핑을 해줘야 한다. 지금 값이 nil이 아니더라도 언제 어디서 어떻게 nil로 변해서 크래시가 날지 모르기 때문에 안전하게 옵셔널 바인딩하는 습관을 들이자.
옵셔널 바인딩은 크게 if let/var
, guard let/var else
두 가지로 구분된다.
if let 상수 = 옵셔널 표현식 {
// 옵셔널 표현식이 nil이 아닐 때 실행될 코드
}
nil
이 아니면 상수에 값을 할당하고 코드 블록을 실행nil
인 경우, 코드 블록은 실행되지 않는다if var 변수 = 옵셔널 표현식 {
// 옵셔널 표현식이 nil이 아닐 때 실행될 코드
}
if var
는 if let
과 비슷하지만, 값의 수정이 필요할 때 사용nil
이 아니면 변수에 값을 할당하고, 이 변수는 코드 블록 내에서 수정될 수 있다.nil
일 경우 코드는 실행되지 않음guard let 상수 = 옵셔널 표현식 else {
// 옵셔널 표현식이 nil일 때 실행될 코드
return // 또는 break, continue, throw 등
}
// 옵셔널 표현식이 nil이 아닐 때 실행될 코드
guard let
은 현재의 코드 블록을 벗어나기 전에 옵셔널 값이 nil
인지 아닌지를 체크nil
이면 else
블록이 실행되고, break, continue, throw 등을 사용해 보통 함수나 루프 등에서 벗어남nil
이 아닌 경우, 이후의 코드를 계속 실행guard var 변수 = 옵셔널 표현식 else {
// 옵셔널 표현식이 nil일 때 실행될 코드
return // 또는 break, continue, throw 등
}
// 옵셔널 표현식이 nil이 아닐 때 실행될 코드
guard var
는 guard let
과 비슷하지만, 값의 수정이 필요할 때 사용nil
이 아니면 변수에 값을 할당하고 이후 코드 내에서 변수 수정 가능nil
인 경우 else
블록 시행, nil
이 아닌 경우 이후 코드 실행둘이 좀 많이 헷갈리는데 else -> nil이라고 생각해야겠다
if let nil아니면 실행
guare let {else nil이면 실행} nil아니면 실행