IUO(Implicitly Unwrapped Optional이란?)
- 옵셔널 묵시적(암시적) 추출
- 강제 추출(!)이나, 옵셔널 바인딩을 활용하는 것과 같이 별도의 추출 과정이 없이도 자동으로 옵셔널이 해제되는 것을 뜻한다.
- 🌟 IUO도 Optional type을 선언하는 방법 중 하나이다!
- Optional type을 non-optional type에 대입할 때 따로 추출하는 과정이 없이 바로 할당이 가능하다!
- 즉, When we define an Implicitly unwrapped optional, we define a container that will automatically perform a force unwrap each time we read it.
- IUO를 정의하는 순간, 우리는 해당 값을 읽을 때마다 forced unwrapping을 하는 container를 정의한 것이라고 볼 수 있다.
아래와 같이 IUO도 Optional type이다.
let miro: String! = "Miro" // 옵셔널 타입이다!
print(miro) // Optional("Miro")
단, 아래와 같이 non-optional type에 대입을 할 때는 바로 할당이 가능하다!(기존의 옵셔널은 error가 나지만!)
var miro2: String = miro
print(miro2) // Miro
그렇다면 언제 사용을 할까?
- 아래와 같이 프로퍼티 지연 초기화를 할 때 사용을 한다!
- init이 되지도 않았는데(그럼 현재는 nil인 상태), 그냥 secondLabel을 밑에서 optional을 때고 쓰고 싶을 때 사용한다!~(옵셔널 바인딩 없이!) 만약 ?을 활용하면 밑에서 계속 optional binding을 해주어야하기에 IUO를 활용한다.
@IBOutlet weak var secondLabel: UILabel!
또 다른 예로는 아래와 같은 경우가 있다.
- collection view를 구현할 때, collection view를 ?, !을 통하여 일단 nil인 상태로 해놓는다.
- 만약 ?로 정의를 했으면 아래에서 계속 Optional Binding을 해주어야하지만,
- IUO를 활용할 경우, 굳이 Optional Binding을 해주지 않아도 된다.
- 또, 아래와 같은 경우는 collectionView가 무조건 initialize가 nil이 아닌 것으로 채워질 것이라고 확신을 할 때만 사용이 가능하다. 만약 그 상태로 계속 nil이라면, collectionView.datasource 와 같은 값에 접근하면 fatal error가 나오게 된다.
var collectionView: UICollectionView!
'Swift' 카테고리의 다른 글
[Swift] 다형성을 활용하여 Enum 대체하기 (0) | 2023.07.26 |
---|---|
[Swift] 다형성과 추상화 (0) | 2023.07.14 |
[Swift] self는 언제 쓸까? (0) | 2023.04.13 |
[Swift] initializers(생성자) (0) | 2023.03.17 |
[Swift] Closure (0) | 2023.03.09 |