iOS/Swift

[Swift] Optional

최지철 2023. 10. 17. 16:32
728x90
반응형

Optionals 이란?

  • "값이 없음"을 표현하는 옵셔널
  • nil

Optional type

  • nil을 사용할 수 있는 타입과 사용할 수 없는 타입을 구분하고, 사용할 수 있는 타입을 가리켜 옵셔널 타입이라고 부른다
  • 자료형 뒤에 ? 를 붙여 옵셔널 타입으로 만든다

Non - optional Type

  • 무조건 값을 가져야한다.
let str: String = "Non-optional Type"

let optionalStr: String? = nil

 

Optional Unwrapping (Forced Unwrapping)

  • Optional Unwrapping을 이용하면 옵셔널타입을 논옵셔널 타입으로 변환 할 수 있다
  • Optional Unwrapping을 사용할려면 절대 Optional Unwrapping을 하고자하는 상(변)수에 nil 이어서는 안된다
  • ! 를 붙여 옵셔널 언래핑을 한다
var str: String? = "Unwrapping"

print(str)     //Optional("Unwrapping")
print(str!)    //Unwrapping 

food = nil
//print(str!)    //런타임 오류 발생!!!

 

Optional Binding

  • 옵셔널 언래핑을 하는 방법 중 하나
  • 강제 추출(Forced Unwrapping) 방법이 있지만 이는 nil이 들어 있어도 강제로 해제해버리는 특성 때문에 값 100프로 있다고 확신할 수 있는 경우를 제외하곤 사용을 지양해야한다. -> 코드에서 발생하는 옵셔널 에러의 대부분을 피할 수 있음(옵셔널 바인딩 사용시)
  • 조건문과 달리, 옵셔널표현식을 평가하고 값이 저장되어있으면 언래핑 후 값을 저장
if let name: Type = OptionalExpression {
	statements
}

while let name: Type = OptionalExpression {
	statements
}

guard let name: Type = OptionalExpression {
	statements
}

if let

  • 단순히 옵셔널 처리 값에 대한 피드백만 주고 싶을 때
  • 값 있으면 이렇게 처리하고 nil 이면 저렇게 처리해!

guard let

  • 옵셔널 처리 값이 nil인 경우 무조건 함수의 실행을 종료 시킬 때
  • 너 값 없니? 그럼 내 함수에서 나가


Implicitly Unwrapped Optionals- IUO (묵시적 옵셔널 추출)

  • ! 사용
  • 값을 추출하는 방법은 강제추출이랑 똑같다. 문제점도 고로 똑같기 때문에 조심해야한다
var num: Int! = 4
var num2: Int = num

Nil-Coalescing Operator

  • Optional String Type ?? Non-Optional String Type
  • 삼항연산자와 비슷한 모양새


Optional Chaining

  • ?.
  • 옵셔널 바인딩하고 비슷한 느낌으로 옵셔널을 확인해가면서 추출한다고 볼 수 있지만 옵셔널 체이닝은 옵셔널 바인딩하고 다르게 코드를 매우 간결하게 작성할 수 있다
  • 체인의 형태처럼 연쇄적으로 옵셔널에 접근
if let my_email = my?.contacts.email {
    print("I have a email : \(my_email)")
}
728x90
반응형