Day 11 - 2023.01.17
nil
확인을 하지 않고 최종적으로 원하는 값이 있는지 없는지 확인할 수 있다.ex.swift
class Person {
var name: String
var job: String?
var home: Apartment?
// 초기화(Initalization)
inint(name: String) {
self.name = name
}
}
class Apartment {
var buildingNumber: String
var rommNumber: String
var `guard`: Person?
var owner: Person?
// 초기화(Initalization)
init(dong: String, ho: String) {
buildingNumber = dong
roomNumber = ho
}
}
// 옵셔널 체이닝 사용
let jamong: Person? = Person(name: "jamong")
let aprat: Apratment? = Apartment(dong: "101", ho: "202")
let superman: Person? = Person(name: "superman")
// 옵셔널 체이닝이 실행 후 결과값이 nil일 수 있으므로 결과 타입도 옵셔널이다.
// ex) 우리집의 경비원의 직업이 궁금할 때 옵셔널 체이닝을 사용하지 않는다면
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("우리집 경비원은 직업이 없어요")
}
}
}
}
}
guardJobWithOptionalChaining(owner: jamong) // 출력 : 우리집 경비원은 직업이 없어요.
jamong?.home?.guard?.job // nil
jaomg?.home = apart
// 집 할당
jamong?.home // Optional(Apartment)
jamong?.home?.guard // nil
// 경비원 할당
jamong?.home?.guard = superman
jamong?.home?.guard // Optional(Person)
jamong?.home?.guard?.name // superman
jamong?.home?.guard?.job // nil
// 직업 할당
jamong?.home?.guard?.job = "경비원"
var guardJob: String
// guardJob이 jamong?.home?.guard?.job이 없으면 "슈퍼맨" 할당
guardJob = jamong?.home?.guard?.job ?? "슈펴맨"
print(guardJob) // 출력 : 경비원
jamong?.home?.guard?.job = nil
guardJob = jamong?.home?.guard?.job ?? "슈펴맨"
print(guardJob) // 출력 : 슈퍼맨