참고 사이트:
Apple Developer
boostcourse
이번 글은 Swift의 Optional에 대해서 작성한다. Swift를 배우면서 Optional이 계속 언급되어 개념을 확실히 정리하고자 작성하게 됨.
@frozen enum Optional<Wrapped>
let shortForm: Int? = Int("42")
let longFrom: Optional<Int> = Int("42")
let number: Int? = Optional.some(42)
let noNumber: Int? = Optional.none
print(number)
// Prints "Optional(42)"
print(noNumber)
// Prints "nill"
print(number)의 출력 결과를 보면 Integer인(42)가 Optional 인스턴스로 Wrapping된 것을 확인할 수 있다.
여기서 Wrapping의 개념을 알아보고 Optional을 설명한다.
다음 예는 dictionary를 이용하여 이미지의 이름과 경로를 사용한 예시다.
let imagePaths = ["star": "/glyphs/star.png",
"portrait": "/images/content/portrait.jpg",
"spacer": "/images/shared/spacer.gif"]
print(imagePaths["star"])
// Prints "Optional("/glyphs/star.png")"
위 예시를 보면 dictionary의 subscript로 접근시 return value 값 또한 Optional 인스턴스임을 확인할 수 있다.
그러면 Optional 인스턴스에 있는 vlaue를 다른 코드에서 사용하기 위해선 unwrap을 해야한다. swift는 여러가지 안전한 방법을 제공한다.
그 중 2가지 방법은 Optional Binding 방식과 Unconditional Unwrapping 즉 Optional 강제 추출이다.
if let startPath = imagePaths["star"]{
print("The star image is at '\(startPath)'")
} else {
print("Couldn't find the star image")
}
// Prints "The star image is at '/glyphs/star.png'"
let number = Int("42")!
print(number)
// Prints "42"
이 방법은 만약 값이 없을때 즉 nil 이면 런타임 에러를 발생시킴으로 강제 추출 방법은 필수적인 경우가 아니면 사용하지 말자!