longlivedrgn
Miro 찾기
longlivedrgn
전체 방문자
오늘
어제
  • 분류 전체보기 (74)
    • Swift (36)
    • iOS (31)
    • Algorithm (0)
    • Architecture, Design Patter.. (1)
    • Computer Science (6)
      • 컴퓨터 네트워크 (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
longlivedrgn

Miro 찾기

[Swift] IUO(옵셔널 암시적 추출)
Swift

[Swift] IUO(옵셔널 암시적 추출)

2023. 6. 12. 14:41

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!

 

TRANSLATE with x
English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
 
TRANSLATE with
COPY THE URL BELOW
Back
EMBED THE SNIPPET BELOW IN YOUR SITE
Enable collaborative features and customize widget: Bing Webmaster Portal
Back

또 다른 예로는 아래와 같은 경우가 있다.

  • 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
    'Swift' 카테고리의 다른 글
    • [Swift] 다형성을 활용하여 Enum 대체하기
    • [Swift] 다형성과 추상화
    • [Swift] self는 언제 쓸까?
    • [Swift] initializers(생성자)
    longlivedrgn
    longlivedrgn

    티스토리툴바