[Swift] 옵셔널 체이닝

HongDuHyeon·2023년 4월 2일
0
post-thumbnail

체인소맨?

옵셔널 체이닝이란?

옵셔널에 속해 있는 nil일지도 모르는 프로퍼티, 메서드, 서브스크립션 등을
가져오거나 호출할 때 사용할 수 있는 일련의 과정

예를 들어 Developer와 Company라는 구조체가 있다고 가정하자. Company에 developer가 아직 없을 수도 있어서 옵셔널로 체크해준다.

struct Developer {
    var name: String
}

struct Company {
    let name: String
    var developer: Developer?
}

var developer = Developer(name:"Hong")
var company = Company(name:"Duhyeon", developer: developer)

print(company.developer)

이때 company를 찍어보면 옵셔널에 묶인
"Optional(__lldb_expr_79.Developer(name: "Hong"))\n"값이 나온다. 뭔가 이상하지만(?) 일단 다시 name까지 찍어보자.

print(company.developer.name)
// error : Value of optional type 'Developer?' must be unwrapped to refer to member 'name' of wrapped base type 'Developer'

어림도 없지 바로 에러가 나온다. 아직 Optional에 감싸져 있어서 얼른 풀어달라는 얘긴데 이때 조금은 가볍게 값을 풀어줄수 있다

print(company.developer?.name) // "Optional("Hong")\n"
print(company.developer!.name) // "Hong\n"

뒤에 ?과 !를 붙히는 방식 두가지로 할 수 있는데 둘다 뜻하는 바는 비슷한데 결과가 조금 다르다.

?를 사용했을 때 옵셔널을 벗겨내고 싶다면 옵셔널 바인딩을 사용하면 된다.

profile
마음이 시키는 프론트엔드.. RN과 IOS를 곁들인..

0개의 댓글