Optional
변수를 Optional 타입으로 사용하면 변수에 값이 있을 수도 없을 수도 있게 사용할 수 있다.
기본적으로 변수를 선언할 때 nil 값이 들어가면 안되는데
? 를 붙이면 Optional로 선언되어 nil이여도 에러가 발생하지 않는다.
사용할 때는 타입뒤에 ? 를 붙이면 Optional type으로 선언된다.
Optional 타입에 nil 값을 넣지 않아도 기본 값은 nil로 저장된다.
Wrapping
Optional 타입의 값은 기본적으로 wrap, 즉 싸여져있는 상태이다.
이 말은 Optional으로 선언된 값이 값이 있는건지 없는건지(nil) wrapping 되어 있어서 알 수 없는 상태이다.
그래서 Optional 타입으로 선언된 값을 그대로 프린트 하면 값 그대로 출력되는 것이 아니라 Optional로 감싸서 출력이된다.
그래서 Unwrapping 즉, 싸여져 있는 값을 벗겨내야된다.
Unwrapping
wrapping 된 값을 꺼내서 확인할 수 있는 5가지 방법이 있다.
1. Force Unwrapping
- Optional 선언부 = type?
- Optional 사용 = text!
let text: String? //Optional
let text2: String = text!
2. Check for nil Value
- nil 값인지 아닌지 확인
let myOptinoal: String?
myOptinoal = nil
if myOptinoal != nil{
let text: String = myOptinoal!
let text2: String = myOptinoal!
}else{
print("myOptional은 nil")
}
3. Optional Binding
- 값을 직접 건들지 않고 새 변수를 둬서 그 값이 변수랑 같은지, nil인지 확인
let myOptinoal: String?
myOptinoal = "Julia"
if let safeOptional = myOptinoal{
let text: String = safeOptional
let text2: String = safeOptional
print(safeOptional+"!!")
}else{
print("myOptional은 nil")
}
4. Nil Coalescing Operator
- 선언 : optional ?? defaultValue
let myOptinoal: String?
myOptinoal = nil
let text: String = myOptinoal ?? "default Value"
print(text) //default Value 출력
5. Optional Chaining
- 체인이 들어간 것처럼 느낌이 묶여있을 것 같은 느낌일 것인데,
- myOptional 프로퍼티들이 묶여있어 property의 타입은 옵셔널이 아니지만 접근하려고 한 myOpional이 옵셔널 타입이기 때문에 최종 값을 Opional이 된다.
//선언
optional?.property
optional?.method()
struct MyOptional {
var property = 123
func method() {
print("struct method!")
}
}
let myOptinoal: MyOptional?
myOptinoal = MyOptional()
myOptinoal?.method()
'Swift' 카테고리의 다른 글
[Swift] 접근제어자 (Access Control) (0) | 2022.05.16 |
---|---|
[Swift] inout parameter (0) | 2022.01.05 |
[Swift] 타입 캐스팅(Type Casting) - in / as 키워드 (0) | 2021.11.27 |
[Swift] Class(클래스)와 Struct(구조체) 차이 - 깊은복사와 얕은복사 (0) | 2021.09.16 |
[Swift] 구조체(struct) 공부하기! (0) | 2021.08.29 |