[스위프트 프로그래밍-14장] 옵셔널 체이닝과 빠른 종료

sanghee·2021년 11월 22일
0
post-thumbnail

이 글은 스위프트 프로그래밍(3판, 야곰 지음)을 읽고 간단하게 정리한 글입니다. 책에 친절한 설명과 관련 예제 코드들이 있으므로 직접 사서 읽기를 추천합니다.

14.1 옵셔널 체이닝

📌키워드: ?

옵셔널 체이닝이란 옵셔널을 반복 사용하여 옵셔널이 체인처럼 서로 이어진 모양을 의미한다. 중간에 값이 하나라도 존재하지 않으면 nil이 반환된다.

옵셔널 강제 추출

📌키워드: !

물음표 대신 느낌표를 사용하면 옵셔널을 강제 추출하는 효과가 있다. 반환 타입은 옵셔널이 아니다. 하지만 값이 없다면 런타임 오류가 발생하므로 사용하지 않는 것이 좋다.

옵셔널 바인딩

if let 변수명 = 옵셔널값 {...}으로 옵셔널을 바인딩하는 것을 의미한다. 블록 안에서 변수를 사용할 수 있다.

서브스크립트

서브스크립트란 특정 요소에 간단하게 접근할 수 있는 문법을 의미한다. 가장 많이 사용하는 곳은 Array, Dictionary이다. 예를 들어 Array[인덱스]로 해당 인덱스에 위치하는 요소에 접근하거나 Dictionary[키]로 해당 키에 해당하는 값에 접근한다.

var dict: [String: [Int]] = [:]

dict["숫자"] = [1, 2, 5, 10]

print(dict["숫자"]) // Optional([1, 2, 5, 10])
print(dict["숫자"]?[2]) // Optional(5)

14.2 빠른 종료

📌키워드: guard

guard 구문은 항상 else구문이 뒤에 따라와야 한다. 특정 조건에 부합하지 않다면 바로 코드 블록의 실행을 종료한다. 코드 블록을 종료할 때에는 return, break, continue, throw 등의 제어문 전환 명령을 사용한다. 제어문 전환 명령을 사용할 수 없는 경우라면 guard 구문을 사용할 수 없다. guard 구문에 조건이 여러개라면 쉼표(,)를 사용하면 된다.

if 구문와 guard 구문의 차이점?

guard 구문을 사용하면 코드 가독성이 더 좋아진다. 코드 블록에서 guard 구문으로 정의한 변수를 사용할 수 있으며, 코드의 depth를 줄일 수 있다.

더블 옵셔널

더블 옵셔널이란 옵셔널이 두번 감싼 타입을 의미한다. 한번에 더블 옵셔널을 해결할 수 있는 방법은 다음과 같다. 옵셔널이 enum으로 구성되어 있어서 case가 지원된다.

var a: Optional<Optional<Int>> = 10

if case let b?? = a {
    print(b)
}

var b: Optional<Optional<Optional<Int>>> = 10

if case let c??? = b {
    print(c)
}
profile
👩‍💻

0개의 댓글