본문 바로가기
iOS/Swift

Swift-6. 옵셔널 체이닝, nil 병합

by 헤콩 2023. 2. 24.
반응형

** 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)	// 선생님

 

 

 

 

 

반응형

댓글