- 이번 글에서는 Swift 언어에서의 optional에 대해 알아보도록 하겠다.
옵셔널
- 지난 글의 스위프트 특이타입에서 nil은 아무것도 없는 상태라는 것을 알아봤다.
- 변수만 선언되어 있고, 아직 인스턴스가 할당되기 전의 상태이다.
- 옵셔널은 이러한 nil을 체크해서 에러가 발생하는 것을 막기 위해 사용한다.
- 옵셔널은 두 가지 가능성을 가질 수 있다.
- 한 가지는 값이 있음을 나타내는 nil이 아님을 확신하는 !와
- 다른 한 가지는 nil의 가능성을 내포하는 ?이다.
옵셔널 타입
- Int?, String?, Double? 등이 옵셔널 타입이다.
- 이는 Int, String, Double과는 엄연히 다른 타입이다.
- 옵셔널 타입은 unwrapping을 통해 사용될 수 있다.
- Unwrapping 하는 방법에는 3가지가 존재한다.
- forced unwrapping, optional binding, early exit
Forced unwrapping
func testFuc(optionalStr:String?) {
if optionalStr != nil {
let unwrapStr:String = optionalStr!
print(unwrapStr)
}
}
- 이는 옵셔널 변수의 값이 nil이 아니라면 !를 통해 옵셔널 변수를 문자열 변수로 변경하는 함수이다.
Optional binding
- 옵셔널 바인딩은 if let이라는 스위프트의 새로운 문법을 통해
- 만약 옵셔널 변수의 값이 nil이 아니라면 옵셔널 변수를 unwrapping 해주는 것이다.
func testFuc(optionalStr:String?)
{
if let unwrapStr = optionalStr
{
print(unwrapStr)
}
}
Early exit
- guard let else문은 조건값이 거짓일때 실행된다.
- 즉, 옵셔널 변수의 값이 nil 값이 대괄호안의 코드가 실행된다.
func testFuc(optionalStr:String?) {
guard let unwrapStr:String = optionalStr { return }
print(unwrapStr)
else
}
Optional Chaining
- 인스턴스의 프로퍼티나 메소드에 접근하기 위해 옵셔널 체인 연사자를 사용한다.
- 다음과 같이 말이다.
var displayLabel: UILabel?
displayLabel?.text = “displayLabel에 옵셔널 체이닝 사용”
nil-coalescing
- 이 기능으로 nil 값일 경우 기본값을 지정해 줄 수 있다.
- ?? 기호를 사용한다.
let defaultImagePath = "/images/default.png"
let heartPath = imagePaths[“image”] ?? defaultImagePath