반응형
** edwith - Swift 프로그래밍 입문 강의 참고 **
# 옵셔널 체이닝 #
- 옵셔널 체이닝은 옵셔널 내부의 내부의 내부로 옵셔널이 연결되어 있을 때 유용하기 활용 가능
- 매번 nil 확인을 하지 않고 최종적으로 원하는 값이 있는지 없는지 확인 가능
class Person {
var name: String
var job: String?
var home: Apartment?
init(name: String) {
self.name = name
}
}
class Apartment {
var buildingNumber: String
var roomNumber: String
var 'guard': Person?
var owner: Person?
init(dong: String, ho: String) {
buildingNumber = dong
roomNumber = ho
}
}
/* 옵셔널 체이닝 사용 */
let been: Person? = Person(name: "been")
let apart: Apartment? = Apartment(dong: "101", ho: "203")
let hye: Person? = Person(name: "hye")
// 옵셔널 체이닝이 실행 후 결과값이 nil일 수 있으므로 결과 타입도 옵셔널입니다.
// 만약 우리집의 경비원의 직업이 궁금하다면...?????
/* 옵셔널 체이닝 사용OO */
func guardJobWithOptionalChaining(owner: Person?) {
if let guardJob = owner?.home?.guard?.job {
print("우리집 경비원의 직업은 \(guardJob)입니다.")
} else {
print("우리집 경비원은 직업이 없어요.")
}
}
guardJobWithOptionalChaining(owner: been)
/* 옵셔널 체이징 사용XX */
func guardJob(owner: Person?) {
if let owner = owner {
if let home = owner.home {
if let 'guard' = home.guard {
if let guardJob = 'guard'.job {
print("우리집 경비원의 직업은 \(guardJob)입니다.")
} else {
print("우리집 경비원은 직업이 없어요.")
}
}
}
}
}
guardJob(owner: been)
# nil 병합 연산자 #
- 기본 사용 : Optional ?? Value
- 중위 연산자
- 옵셔널 값이 nil일 경우, 우측의 값을 반환
- 띄어쓰기에 주의!!!
been?.home?.guard?.job = "경비원"
var guardJob: String
guardJob = been?.home?.guard?.job ?? "선생님"
print(guardJob) // 경비원
been?.home?.guard?.job = nil
guardJob = been?.home?.guard?.job ?? "선생님"
print(guardJob) // 선생님
반응형
'iOS > Swift' 카테고리의 다른 글
Swift-9. 프로토콜(protocol), 익스텐션(extension) (0) | 2023.02.24 |
---|---|
Swift-8. assert, precondition, guard (0) | 2023.02.24 |
Swift-5. 인스턴스 생성 및 소멸 (0) | 2023.02.24 |
Swift-4. 클로저, 프로퍼티 (0) | 2023.02.24 |
Swift-3. 구조체, 열거형 (0) | 2023.02.24 |
댓글