봄날은 갔다. 이제 그 정신으로 공부하자

swift optional 제거 방법 본문

iOS Tip

swift optional 제거 방법

길재의 그 정신으로 공부하자 2022. 2. 22. 22:22

이번 글에서는 변수가 optional인 경우 unwrapping해서 사용하는 방법에 대해 설명하도록 하겠습니다.

 

아래 두개의 value를 더한다는 가정을 해보도록 하겠습니다.

leftValue는 nil을 허영하는 optional이고 rightValue는 optional이 아닙니다.

let leftValue: Int? = 3
let rightValue: Int = 5

 

두 개의 값을 더해보겠습니다.

let sum = leftValue + rightValue

 

leftValue가 optional이므로 아래와 같은 에러를 표시하면서 빌드 에러가 발생합니다.

Value of optional type 'Int?' must be unwrapped to a value of type 'Int'

 

이를 해결하기 위해서는 대략 3가지 방법이 있습니다. 

 

우선 첫번째로 

sum 값을 구할 때 leftValue가 nil 인 경우 대체할 값을 선언해주는 문법인 "??"를 사용하는 것으로 아래와 같이 사용할 수 있습니다.

let sum = leftValue ?? 0 + rightValue

 

두번째는 if let을 사용해주는 방법으로 아래와 같이 사용할 수 있습니다.

var sum: Int = 0
if let lValue = leftValue {
   sum = lValue + rightValue
} else {
   sum = rightValue
}

 

If let 문법에 의해 lVaule는 optional이 unwrapping 되었으므로 if let 스코프 안에서 "lValue + rightValue" 사용가능하지만 else에서는 "rightValue"만 더해줍니다.

그 이유는 lValue는 if let 스코프 안에서만 유효하기 때문입니다. 즉, else 문이나 외부에서는 사용할 수 없습니다.

 

If let 문법은 nil인 경우와 그렇지 않은 경우에 대해 모두 처리할 필요가 있을 때 유용한 문법 입니다.

 

 

세번째는 guard let 문법으로 nil이 아닌 경우에만 처리하고자 할 때 사용하는 문법 입니다.

guard let lValue = leftValue else {
   return
}
sum = lValue + rightValue

 

guard let 문법은 leftlValue가 nil일 경우 예외 처리하는 용도로 사용하는 문법으로 nil일 경우 더이상의 처리를 하지 않도록 되어 있습니다.

 

 

정리

이상으로 optional 제거를 위한 3가지 방법에 대해 설명하였습니다.

 

nil에 대한 간단한 처리가 필요한 경우에는 "??"

조금 복잡한 처리 또는 구분해서 처리가 필요한 경우에는 "if let"

nil 경우에 대한 예외 처리가 필요하면 guard let 사용하면 됩니다.

Comments