Optional 이란?
변수의 값이 nil 일수도 있다는 것을 표현하기 위해 사용합니다. Swift에서의 nil 이란 value가 없는 것을 의미합니다.
다른 언어에서처럼 포인터가 없다거나 그런 의미는 아닙니다.
사용법
var optionalInt: Int? = nil
var nonOptionalInt: Int = nil // error
print(optionalInt) //Optional(nil)
//옵셔널 타입에 값을 넣으면?
optionalInt = 3
print(optionalInt) //Optional(3)
그렇다면 optionalInt + nonOptionalInt 는 가능할까요?
불가능 합니다. optionalInt는 Optional로 한번 wrapping 되어 있기 때문에
Value of optional type 'Int?' not unwrapped; did you mean to use '!' or '?'?
이런 에러가 발생합니다. 그래서 옵셔널 값을 사용하기 위해 옵셔널을 wrapping되어 있는것을 벗겨낼 필요가 있습니다.
알아두셔야 할 4가지 방법이 있습니다.
옵셔널 해제 방법
- 강제 옵셔널 해제 : !사용
- 옵셔널 바인딩
- 옵셔널 체이닝 (옵셔널을 해제하는 건 아니고 간단히 표현할 수 있게 도와줌)
- Nil-Coalescing Operator
강제 옵셔널 해제
var optionalInt: Int? = nil
var nonOptionalInt: Int = nil // error
print(optionalInt) //Optional(nil)
//옵셔널 타입에 값을 넣으면?
optionalInt = 3
//!를 붙여서 강제로 옵셔널 해제시킴
print(optionalInt!) //3
강제로 해제 시키는 것이기 때문에 만약 optionalInt가 nil 이었을 때 !로 옵셔널을 벗겨내면 런타임 에러가 발생합니다.
Optional타입만 nil을 할당할 수 있기 때문입니다.
옵셔널 바인딩
var optionalInt: Int? = nil
optionalInt = 3
//옵셔널 바인딩
if let newInt = optionalInt {
print(newInt) //3
}
optionalInt가 nil이 아니면 { } 안쪽을 실행하게 됩니다. 강제로 해제하는 것이 아니기 때문에 에러에 대해 안전합니다.
옵셔널 체이닝 (옵셔널 해제는 아니고 간단히 표현도와줌)
struct A {
var a: B? = B()
}
struct B {
var b: C? = C()
}
struct C {
var c: Int? = 5
}
var aaa = A()
print(aaa.a?.b?.c) //Optional(5)
//이런식으로 사용 안해도 됨
if let aaaa = aaa.a {
if let aaaab = aaaa.b {
if let aaaabc = aaaab.c {
print(aaaabc) //5
}
}
}
Nil-Coalescing Operator
var a: Int? = nil
// nil 이면 3 출력
print(a ?? 3) // 3
출처 및 참고
공식문서 : https://developer.apple.com/documentation/swift/optional
반응형
'IOS Swift' 카테고리의 다른 글
SceneDelegate 란? (2) | 2021.09.16 |
---|---|
MVC와 MVVM의 차이점 및 장단점 (0) | 2021.09.09 |
Hashable Swift 4.1 전 과 후 (2) | 2021.08.29 |
[자료구조] HashTable 이란? (0) | 2021.08.29 |
Hashable 이란? - Swift (2) | 2021.08.24 |