Swift Optional

Jee.e (황지희)·2022년 4월 18일
0
post-custom-banner

Optional

  • 값이 있을수도, 없을수도 있다 는 뜻
  • enumgeneral 의 합작품
  • 옵셔널 변수를 선언하는 방식에는 옵셔널 Optional(?) 과 암시적 추출 옵셔널 IUO, Implicitly Unwrapped Optional(!) 이 있다.
enum Optional<Wrapped> : ExpressibleByNilLiteral {
    case none
    case some(Wrapped)
}

let optionalValue: Optional<Int> = nil
let optionalValue: Int? = nil //위와 똑같은 표현임

☑️ 사용 예

let age: Int
print(age)
// 오류가 뜸. age의 값이 없는데 출력하려고 해서
// 그래서 값을 넣어줘야하는데, 만약 값을 넣기 싫다면 옵셔널을 사용하면 됨

let age: Int?
print(age ?? "") 

✅ Dictionary에서 키에 해당하는 값이 항상 Optional인 이유?

실행 시점에 키에 해당하는 값의 존재 여부를 확신할 수 없기 때문
쉽게 말해, 딕셔너리는 언제든 키와 값을 수정할 수 있기때문에 컴파일을 하는 시점에는 딕셔너리 내부의 키와 값의 쌍이 어떻게 변할지모름 ➡️ 그래서 딕셔너리에서 값을 꺼내올 때는 항상 값이 없을 수 있음에 대비해야함.


✅ 옵셔널은 왜 존재하는가?

  • nil의 가능성을 문서화 하지 않아도, 코드만으로 표현 (문서, 주석 시간을 절약, 전달받은 값이 옵셔널이 아니라면 nil체크를 하지 않더라도 안심하고 사용) ➡️ 효율적인 코딩
  • 예외 상황을 최소화하는 안전한 코딩

✅ 옵셔널로 선언된 값을 사용하고싶다면?

안전을 중요하게 생각하는 Swift에서는 반드시 옵셔널로 선언된 값을 사용하기 위해, 값을 추출해 써야한다.
값을 추출하는 방법으로는 Optional BindingForce Unwrapping(강제추출) 이 있다.


Optional Binding

  • nil 체크를 함과 동시에, 안전하게 값을 추출하는 것
  • if let 혹은 guard let 을 사용한다.

☑️ 사용 예

var myName: String? = nil
    
// if let
if let name: String = myName {
    print(name)
} else {
    print("myName == nil")
}
    
// guard let
guard let myName = myName else { return }

Force Unwrapping(강제추출)

  • !를 붙이는것
  • 안전(예외처리)을 위해 강제추출이 아닌, 옵셔널 바인딩을 사용하는게 좋다.
profile
교훈없는 경험은 없다고 생각하는 2년차 iOS 개발자입니다.
post-custom-banner

0개의 댓글