본문 바로가기
Swift

[Swift] 옵셔널 추출 (Optional Unwrapping)

by Sky Titan 2021. 5. 5.
728x90

옵셔널 추출 (Optional Unwrapping)

  • 옵셔널의 값을 옵셔널이 아닌 값으로 추출하는 방법

 

1. 강제 추출 (Forced Unwrapping)

  • 가장 간단하게 옵셔널의 값을 추출할 수 있지만 가장 위험한 방법이다.
  • 옵셔널 안의 값이 조건 nil이 아님을 가정하고 사용하게 하는 방법이기 때문에 런타임 오류가 발생할 가능성이 크다
    • 더불어서 사실상 옵셔널을 사용하는 의미가 무색해지게 한다.
  • 옵셔널 값 뒤에 !를 붙인다.
  • 만약 옵셔널 값이 nil이라면 런타임 오류 발생
import Foundation

var test: String? = "Wow"

var unwrapped_test: String = test!

print(unwrapped_test) //Wow

test = nil

unwrapped_test = test! //런타임 오류 발생

 

2. 옵셔널 바인딩 (Optional Binding)

  • 값이 nil인지 먼저 확인하고 값이 있다면 추출한 값을 일정 블록내에서 사용할 수 있는 상수, 혹은 변수로 할당해서 옵셔널이 아닌 형태로 활용 가능하게 해준다.
  • if, while 구문과 결합하여 사용
  • , (쉼표)를 이용해서 여러 옵셔널의 값을 한 번에 추출할 수 있다.
    • 만약 하나라도 nil이라면 해당 블록의 명령문은 실행되지 않는다.
import Foundation

var test: String? = "Wow"

if let unwrapped_test = test {
    print("test : \(unwrapped_test)")
} else {
    print("it is nil")
}

var test2: String? = nil

if let unwrapped_test = test, let unwrapped_test2 = test2 {
    print("test : \(unwrapped_test)")
    print("test2 : \(unwrapped_test2)")
} else {
    print("there is a nil")
}

while let unwrapped = test 
{
    print("It is not nil until now")
    test = nil
}
/* 결과 : 
test : Wow
there is a nil
It is not nil until now
*/

 

3. 암시적 추출 옵셔널 (Implicitly Unwrapped Optionals)

  • 로직상 nil이 할당되지 않는다고 확신하는 경우 사용하는 암시적 추출 옵셔널 타입
  • 변수 타입 뒤에 ? 대신 !를 붙여서 사용한다.
  • nilable한 변수이지만 non-optional 변수들처럼 사용가능하다.
  • 하지만 nil이 할당된 상태에서 접근 시도하면 런타임 오류 발생
import Foundation

var test: String! = "wow"

print(test)

/* 결과
wow
*/
728x90

'Swift' 카테고리의 다른 글

[Swift] 제네릭 (Generics)  (0) 2021.05.28
[Swift] 이니셜라이저 (Initializer)  (0) 2021.05.28
[Swift] Selector  (0) 2021.04.22
[Swift] Equatable  (0) 2021.04.21
[Swift] 요구 이니셜라이저 (Required Initializer)  (0) 2021.03.02

댓글