값이 있을수도, 없을수도 있다
는 뜻enum
과general
의 합작품- 옵셔널 변수를 선언하는 방식에는 옵셔널
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 ?? "")
실행 시점에 키에 해당하는 값의 존재 여부를 확신할 수 없기 때문
쉽게 말해, 딕셔너리는 언제든 키와 값을 수정할 수 있기때문에 컴파일을 하는 시점에는 딕셔너리 내부의 키와 값의 쌍이 어떻게 변할지모름 ➡️ 그래서 딕셔너리에서 값을 꺼내올 때는 항상 값이 없을 수 있음에 대비해야함.
안전을 중요하게 생각하는 Swift에서는 반드시 옵셔널로 선언된 값을 사용하기 위해, 값을 추출해 써야한다.
값을 추출하는 방법으로는 Optional Binding
과 Force 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(강제추출)