swift & iOS/swift

[swift] 옵셔널 체이닝 optional chaining

whale3 2022. 1. 28. 15:22

옵셔널 체이닝은 옵셔널 타입의 프로퍼티, 메소드를 호출하는 과정(a process)이다. 중간에 nil이 한번이라도 발생하면 결과는 무조건 nil이다. 프로퍼티나 메소드 리턴값이 nil이어도 런타임 에러 같은 crash가 발생하지 않는다. 옵셔널 체이닝으로 받는 값은 nil아니면 옵셔널 타입이다. 

 

// 출처: https://docs.swift.org/swift-book/LanguageGuide/OptionalChaining.html#ID246

class Person {
    var residence: Residence?
}

class Residence {
    var numberOfRooms = 1
}


let john = Person()


let roomCount = john.residence!.numberOfRooms // ! 강제로 옵셔널을 벗기면 런타임 에러가 발생할 수 있다


if let roomCount = john.residence?.numberOfRooms { // 중간에 nil이어도 런타임 에러가 발생하지 않음
    print("John's residence has \(roomCount) room(s).")
} else {
    print("Unable to retrieve the number of rooms.")
}
반응형