코딩을 하다보면 구조체 내부에서 또다른 인스턴스가 들어오는 상황이 생긴다.
그러다 보면 프로퍼티를 따라서 들어가는 경우가 생기는데 이때 프로퍼티가 옵셔널인 경우 nil인지 아닌지 확인해야하는 경우가 있다.
예시를 보면 쉽게 알 수 있다.
□ Optional Chaining 적용 안한 것
func guardJob(owner: Person?) {
if let owner = owner {
if let home = home {
if let `guard` = home.guard {
if let guardJob = `guard`.job {
print("우리집 경비원의 직업은 \(guardJob)입니다")
} else {
print("우리집 경비원은 직업이 없어요")
}
}
}
}
}
□ Optional Chaining 적용
func guardJobOptionalChaining(owner: Person?) {
if let guardJob = owner?.home?.guard?.job {
print("우리집 경비원의 직업은 \(guardJob)입니다")
} else {
print("우리집 경비원은 직업이 없어요")
}
}
guardJobOptionalChaining(owner: zehye)
zehye?.home?.guard?.job // nil
zehye?.home = apart
zehye?.home // Optional(Apartment)
zehye?.home?.guard // nil
zehye?.home?.guard = superman
zehye?.home?.guard // Optional(Person)
zehye?.home?.guard?.name // superman
zehye?.home?.guard?.job // nil
zehye?.home?.guard?.job = "경비원"
zehye?.home?.guard?.job // 경비원
nil 병합 연산자 (nil-coalescing operator)
옵셔널이 nil인 경우 기본값을 설정하고 싶은 경우, ??를 사용하여 설정할 수 있다.
※ 참고
'iOS > Swift 상식' 카테고리의 다른 글
Async/Await (0) | 2023.07.23 |
---|---|
Swift에서 타입 안전성(type safety)은 어떤 방식으로 보장되나요? (0) | 2023.07.23 |
Codable (0) | 2023.06.26 |
Result Type (0) | 2023.03.25 |
Some (0) | 2023.03.25 |