티스토리 뷰
[옵셔널 체이닝]
- 옵셔널에 속해 있는 nil일지도 모르는 프로퍼티, 메서드 등을 가져오거나 호출할 때 사용할 수 있는 일련의 과정
- 옵셔널을 반복 사용하여 옵셔널이 서로 꼬리를 물고 있는 모양이므로 옵셔널 체이닝이라고 부름
- 중첩된 옵셔널 중 하나라도 값이 존재하지 않으면 nil을 반환
- 옵셔널 변수나 상수 뒤에 물음표를 붙여 표현
- 결과적으로 nil이 반환될 가능성이 있으므로 옵셔널 체이닝의 결과는 항상 옵셔널임
- 옵셔널 바인딩으로 값을 가져오는 것보다 코드의 양이 훨씬 줄어드는 효과를 가져옴
- 옵셔널 체이닝의 결과도 옵셔널이므로 이를 옵셔널 바인딩하여 사용 가능
- 옵셔널의 서브스크립트를 사용하고자 할 때는 대괄호보다 앞에 물음표를 표기해주어야 함
: 배열, 딕셔너리에서 값을 가져올 때 해당 변수 이름과 대괄호 사이에 물음표를 표기해주어야 함
[빠른종료]
- guard 키워드를 사용
1 2 3 4 5 | guard Bool 타입 값 else{ 예외사항 실행문 제어문 전환 명령어 } | cs |
- guard 뒤에 오는 값이 false이면 else 블록을 실행
: else 블록에는 반드시 자신보다 상위의 코드 블록을 종료하는 코드가 들어가야 함
: return, break, continue, throw와 같은 제어문 전환 명령, fatalError()와 같은 비반환 함수나 메서드 호출 가능
- 예외사항만을 처리하고 싶을 때 활용하면 if문을 활용할 때보다 훨씬 간결하고 읽기 좋게 코드를 작성할 수 있음
- guard문에서 옵셔널 바인딩된 값을 해당 구문 아래 코드부터 함수 내부의 지역상수처럼 사용할 수 있음
1 2 3 4 5 6 7 8 | let number: Int? = 10 func function() { guard let value = number else { return } print(value) } function() //10 | cs |
- 쉼표를 사용하여 조건을 추가할 수 있음, 쉼표 대신 &&을 사용 가능
- else문에서 제어문 전환 명령어를 사용해야 하므로 함수나 메서드, 반복문 등 특정 블록 내부에 위치하지 않는다면 사용할 수 없음
'Swift > 야곰의 스위프트' 카테고리의 다른 글
16장 모나드 (0) | 2018.02.12 |
---|---|
15장 맵, 필터, 리듀스 (0) | 2018.02.12 |
13장 클로저 (0) | 2018.02.12 |
12장 접근제어 (0) | 2018.02.05 |
11장 인스턴스 생성 및 소멸 (0) | 2018.02.05 |