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 |
댓글