옵셔널체이닝

작성일

옵셔널체이닝

struct Friend {
    let nickName: String
    let person: Person?
}

struct Person {
    let name: String
    let pet: Pet?
}

struct Pet {
    let name: String?
    let kind: String
}

let pet = Pet(name: "개냥이", kind: "고양이")
let person = Person(name: "최재권", pet: pet)
let friend = Friend(nickName: "취준생", person: nil)

// 이런식으로 옵셔널이 연쇄적으로 있을때
if let person = friend.person {
    if let pet = person.pet {
        if let petName = pet.name {
            print("petName: \(petName)")
        }
    }
}
// 옵셔널 체이닝
// 한번만 언랩핑하고 나머지는 옵셔널 처리가 가능하다.
if let petName = friend.person?.pet?.name{
    print("petName: \(petName)")
} else {
    // person, pet, name 중 하나가 nil이면
    print("펫 이름이 없어요")
}

출력

펫 이름이 없어요