Forced Unwrapping

blanky_munn·2022년 4월 7일
0

Swift

목록 보기
3/3

첫 글로 Optinal에 대해 찾아보며 공부한 것을 올렷는데
이렇게 선언한 Optinal로 선언된 값은 일반 자료형이 아닌 Optinal 자료형이다.

let name:String? = nil
print(type(of:name))

이렇게 선언된 변수의 Type을 확인해보면

Optional<String>

그냥 String 값이 아니라 Optinal이 앞에 붙은걸 알 수 있다.
이 자료형은 일반 자료형이 아니기 때문에 사용하려면 Optinal을 벗겨내야한다.

Optinal을 벗겨내는 작업을 Optinal Unwrapping 이라고 하며,이 작업을 하면 NonOptinalType으로 변경 가능하다.

Optinal UnWrapping을 하기 위해선 절대 그 값이 nil값이면 안된다

강제 추출 (Forced Unwrapping)

단어 그대로 강제로 추출하는 것이다.

위에서 Optinal UnWrapping을 하기 위해선 nil값이 아니면 안 된다고 했는데, 강제 추출은 nil이든 아니든 그냥 강제로 Optinal을 벗겨낸다.

let name:String? = "Blanky"
print(name!)

이렇게 강제로 Optinal을 벗겨낼 수 있다.

그렇지만 어느 곳에서든 강제로 하는 방법은 좋지않다. 개발자가 이 값은 무조건 nil이 아니다 ! 라고 할 경우에 사용할 수 있겟지만 만약 이 값이 nil값일경우에는 Crash가 일어나서 앱이 종료되는 경우가 발생하게된다.

그리므로 우리는 이 값이 nil인지 아닌지 확인하고 사용하는 방법인 Optinal Binding을 사용할 수 있다.

Optinal Binding

Udemy 강의를 들을때도 많이 보게되었던 문법이다.
이 방법도 Optinal을 벗겨내는 방법 중 하나이다.

let num : Int? = 4
if let optional = num {
    print(optinal)
} else {
    print(num)
}

if 문을 사용해서 값이 nil인지 아닌지 확인해서 안전하게 Optional을 벗겨낼수 있게 된다.

정말 Swift언어는 다른 언어와 다르게 매력이 있어 더 찾아보고 공부 하게 되는것 같다. 언어와 대화하는 기분이 드는...??

let optionalNum : Int? = nil
guard let nonOptional = optionalNum else {
    return
}

Udemy 강의 에서 if let 과 guard let 의 차이를 듣게 되었는데,
if문은 else 구문까지 실행되는 것을 고려해서 코드를 작성하게 되는데, guard let 구문은 else구문이 최대한 실행되지않게 코드를 작성한다.

저기 위의 코드에서 optinalNum이 존재하는지 안하는지 확인할때 자주 사용되는 것을 다른 코드에서 많이 보았다.

이렇게 두 가지 Optional Unwrapping 방법을 알게되었는데, if let 구문과 guard let 구문의 차이점은 위에서 설명했듯이 else구문의 실행을 고려하느냐, 아니냐의 차이인것같다 !

profile
iOS 개발자 꿈나무

0개의 댓글