본문 바로가기
Languages/Swift

사당 iOS 스터디 3주차 - 옵셔널 체이닝과 빠른종료

by 탄이. 2018. 8. 17.

CHAPTER 14 옵셔널 체이닝과 빠른종료

__14.1 옵셔널 체이닝

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

옵셔널에 값이 있다면 프로퍼티, 메서드, 서브스크립트 등을 호출할 수 있고, 옵셔널이 nil이라면 nil을 반환

중첩된 옵셔널 중 하나라도 값이 존재하지 않는다면 결과적으로 nil을 반환

결과적으로 nil이 반환될 가능성이 있으므로 옵셔널 체이닝의 반환된 값은 항상 옵셔널

느낌표(!)

  • 값을 강제 추출하기 때문에 옵셔널에 값이 없다면 런타임 오류가 발생

  • 옵셔널에서 값을 강제 추출해 반환하기 때문에 반환 값이 옵셔널이 아니라는 점

옵셔널 체이닝의 결괏값은 옵셔널 값이기 때문에 옵셔널 바인딩과 결합할 수 있는 것

옵셔널 체이닝을 통해 값을 받아오기만 하는 것이 아니라 반대로 값을 할당

  • yahoo.address?.building?.room?.number = 505

만약 메서드의 반환 타입이 옵셔널이라면 이 또한 옵셔널 체인에서 사용 가능

  • yahoo.address?.fullAddress()?.isEmpty

옵셔널의 서브스크립트를 사용하고자 할 때는 대괄호([])보다 앞에 물음표(?)를 표기

__14.2 빠른종료

guard 구문의 옵셔널 바인딩 활용

  • 옵셔널 바인딩의 역할

  • guard 뒤에 따라오는 옵셔널 바인딩 표현에서 옵셔널의 값이 있는 상태라면 guard 구문에서 옵셔널 바인딩된 상수를 guard 구문이 실행된 아래 코드부터 함수 내부의 지역상수처럼 사용

guard 구문에 구체적인 조건을 추가

  • 쉼표(,)로 추가조건을 나열

  • 추가된 조건은 Bool 타입 값

  • 쉼표로 추가된 조건은 AND 논리연산과 같은 결과

guard 구문이 사용될 수 없는 경우

  • 자신을 감싸는 코드 블록, 즉 return, break, continue, throw 등의 제어문 전환 명령어를 쓸 수 없는 상황이라면 사용이 불가능

  • 함수나 메서드, 반복문 등 특정 블록 내부에 위치하지 않는다면 사용이 제한




    참고


    야곰의 스위프트 프로그래밍 https://book.naver.com/bookdb/book_detail.nhn?bid=12571019


댓글