Youngminah/TIL

옵셔널 언래핑

Closed this issue · 0 comments

Optional 이란?

  • 변수에 값이 있을 수도 있고 없을 때 나타냅니다.
  • 옵셔널 변수를 정의할 때에는 타입 어노테이션에 ?를 붙여야 합니다.
  • 옵셔널에 초깃값을 지정하지 않으면 기본값은 nil입니다.

강제추출 !

  • 옵셔널 강제 추출 방식은 런타임 오류가 일어날 가능성이 제일 높은 방법이다.
  • 옵셔널의 값을 강제 추출하려면 옵셔널 값의 뒤에 느낌표를 붙여주면 강제로 값을 추출하여 반환한다.
  • 강제 추출시 옵셔널에 값이 없다면, 런타임 오류가 발생한다.
  • 로직상으로 nil이 할당되지 않을 것 같다는 확신이 들 때 사용.
var food: String? = "pizza"
var myFavoriteFood: String = food!

print(myFavoriteFood)	//pizza

food = nil
myFavoriteFood = food!	//런타임 오류

옵셔널 바인딩

  • 옵셔널 바인딩은 옵셔널의 값이 존재하는지를 검사한 뒤, 존재한다면 그 값을 다른 변수에 대입시킵니다.
  • 이것을 unwrapping이라고 부릅니다.
  • if let~ 또는 guard let ~ else 로 바인딩을 해줄 수 있습니다.

옵셔널 체이닝

  • 옵셔널 체이닝은 옵셔널의 속성에 접근할 때, 옵셔널 바인딩 과정을 ? 키워드로 줄여주는 역할을 합니다.
  • 하위 프로퍼티에 Optional 값이 있는지 연속적으로 확인하면서
  • 중간에 하나라도 nil이 발견된다면 nil이 반환하는 것이 옵셔널 체이닝 방식.
  • 옵셔널 체이닝에 의해 nil 값이 호출 될 수 있기 때문에 옵셔널 체이닝의 값은 항상 옵셔널 값이 됩니다.
  • 체이닝의 다중 레벨 연결
    • 옵셔널 체이닝의 상위 레벨 값이 옵셔널인 경우 현재 값이 옵셔널이 아니더라도 그 값은 옵셔널값이 됩니다.
    • 옵셔널 체이닝의 상위 레벨 값이 옵셔널이고 현재 값이 옵셔널 이라고 해서 더 옵셔널하게 되진 않습니다.
    • 옵셔널 체이닝을 통해 값을 검색하거나 메소드를 호출하면 몇 단계를 거치는지 상관없이 옵셔널을 반환합니다.
let isEmptyArray = array?.isEmpty == true
  • array가 nil인 경우, nil을 반환합니다.
  • array가 빈 배열인 경우, true를 반환합니다.
  • array에 요소가 있는 경우, false를 반환합니다.

스위프트 문서 한국어 번역