안녕하세요~ 차니에요!
오늘은 지난 시간에 이어서 옵셔널 바인딩에 대해 포스팅하려고 해요.
옵셔널에 대해 잘 모르신다면 이전 글 한 번 슥 보고 와주세요~
1. Optional binding 이란?
Optional Type의 변수에서 값을 추출(unwrapping)하는 과정을 일컬어 Optional binding이라 합니다.
아래로는 여러 바인딩 방법에 대해 알아보도록 할게요~!
2. forced unwrapping
forced unwrapping, 번역하면 강제 추출이라는 뜻으로 Optional Type 변수에서 값을 강제로 추출하는 방법입니다.
사용법은 추출할 변수명뒤에 !를 붙혀주면 됩니다.
그러면 출력 결과에 unwrapping된 값(summer)이 찍히는 걸 볼 수 있습니다.
두 번째 예제는 nil 값을 강제 추출하는 과정입니다.
빌드 시점에는 문제가 없지만 런타임 중에 위 코드가 실행된다면 앱이 크래시 나는 상황이 발생할 수 있으니 옵셔널 강제 추출은 사용을 지양하여야 합니다.
3. if let/guard let
2021.07.01 - [iOS/Swift] - [Swift] if let vs guard let (기본편)
2021.07.01 - [iOS/Swift] - [Swift] if let vs guard let (응용편)
이전에 if let과 guard let에 대해 작성한 글이 있으니 위 게시글을 참고해주세요!
4. Nil-Coalescing Operator
optional ?? value
번역하면 nil 합병 연산자입니다.
좌측 optional 변수가 nil일 경우 ?? 뒤의 value가 출력됩니다.
5. Optional Chaining
옵셔널 체이닝이란 옵셔널들이 체이닝 된 형태로 연속된 옵셔널 정도로 볼수가 있겠습니다.
struct Season {
let season: String
let reason: String
}
struct Person {
let name: String?
let favSeaon: Season?
}
let channy: Person? = Person.init(name: "channy", favSeaon: Season.init(season: "가을", reason: "시원하게 부는 바람이 좋아"))
예제를 위해 Season, Person struct를 정의하였습니다.
옵셔널 체이닝을 사용하지 않았을 때와 사용했을 때를 보여드리겠습니다.
5-1. Optional Chaining 미적용
if let channy = channy {
if let favSeason = channy.favSeaon {
if let season = favSeason.season {
print("차니가 가장 좋아하는 계절은 \(season)이야")
}
}
}
if let으로 각각의 변수에 값이 있는지 체크하여 처리하는 모습입니다.
해당 조건 중 하나라도 nil이 있다면 정상 출력되지 않을 것 입니다.
5-2. Optional Chaining 적용
print("차니가 가장 좋아하는 계절은 \(channy?.favSeaon?.season)이야")
변수명 뒤에 ?가 달린 것은 Optional Type이기 때문입니다.
해당 옵셔널 타입의 변수 중 하나라도 nil일 경우 참조가 불가능하기 때문에 전체 결과가 nil로 떨어집니다.
이해가 안되는 부분이 있다면 댓글로 남겨주세요~