옵셔널 체이닝(Optional Chaining)

썹스·2022년 11월 11일
0

Swift 문법

목록 보기
38/68

옵셔널 체이닝(Optional Chaining)

옵셔널 체이닝(Optional Chaining)옵셔널 타입의 객체에 대하여 반복적(연쇄적)으로 접근하는 방식의 문법입니다.

옵셔널 타입의 객체에 접근할 때는 접근 연산자( . )를 사용하여 접근합니다.

옵셔널 체이닝의 마지막 결과값은 항상 옵셔널 타입이며, 옵셔널 체이닝 중간 결과값이 nil일 경우 결과값은 nil로 반환됩니다.

마지막 결과값이 항상 옵셔널 타입이라 해서 마지막 멤버에 물음표(?)를 붙이지는 않습니다.

옵셔널 체이닝의 특징 요약

  • 옵셔널 타입에 대하여 접근 연산자( . )를 호출하는 방법입니다. => 객체?.멤버

  • 옵셔널 체이닝의 마지막 결괏값은 항상 옵셔널 타입입니다.

  • 옵셔널 체이닝의 중간값이 nil일 경우, 결괏값을 nil로 반환합니다.

  • 옵셔널 체이닝의 마지막 멤버는 물음표( ? )를 붙이지 않습니다.

✅ 옵셔널 체이닝을 사용한 문법

class Man{
    var name: String?
    var age: Int

    init(name: String, age: Int){
        self.name = name
        self.age = age
    }
}

var kim: Man? = Man(name: "김철수", age: 20)
print(kim?.name)   // Optional("김철수")



// "인스턴스(멤버)?.멤버" 형태의 옵셔널 체이닝 => kim?.name
// 옵셔널 체이닝의 마지막 멤버(name)는 물음표( ? )를 붙이지 않습니다. => name 속성이 옵셔털 타입이지만, 물음표( ? )를 붙이지 않습니다.
// 결괏값은 옵셔널 타입입니다. => Optional("김철수")

📌 특이한 형태의 옵셔널 체이닝

✅ 옵셔널 체이닝의 함수 관련 표기법

함수명?( )?

? : 함수가 없을 가능성이 있다는 뜻의 물음표(?)
즉, 함수가(myOccupation) 없을 가능성이 있다는 의미

? : 함수의 결괏값이 없을 가능성이 있다는 뜻의 물음표(?)
즉, 함수(occupationType)의 return value가 nil일 가능성이 있다는 의미

class Man{
    var name: String? = "아무개"
    var myOccupation: (() -> Occupation?)?
   
    init(function: @escaping () -> Occupation?){
        self.myOccupation = function
    }
}

class Occupation{
    var occupationName: String?
}

func occupationType() -> Occupation?{
    let ocp = Occupation()
    ocp.occupationName = "ios 개발자"
    return ocp
}



var kim: Man? = Man(function: occupationType)
print(kim?.name)   //Optional("아무개")
print(kim?.myOccupation?()?.occupationName)   //Optional("ios 개발자")

✅ 옵셔널 체이닝의 딕셔너리 관련 표기법

딕셔너리명?[ ]?

? : 딕셔너리가 없을 가능성이 있다는 뜻의 물음표(?)
? : 딕셔너리의 결괏값이 없을 가능성이 있다는 뜻의 물음표(?)

class OccupationType{
    var occupation: [String: Man]?
}

class Man{
    var name: String?
}

var kim = Man()
kim.name = "김철수"

var shin = Man()
shin.name = "신짱구"



var occupationType = OccupationType()
occupationType.occupation = ["iOS": kim, "android": shin]

print(occupationType.occupation?["iOS"]?.name)   // Optional("김철수")
profile
응애 나 코린이(비트코인X 코딩O)

0개의 댓글