상세 컨텐츠

본문 제목

Swift언어7 - 함수형 프로그래밍_옵셔널 체이닝(?)과 빠른 종료(guard문)

Swift언어

by 앱등개발자IOS 2022. 10. 4. 01:47

본문

1. Swift의 옵셔널 체이닝

 

옵셔널 체이닝이란? 

옵셔널 체이닝은 "프로퍼티, 메서드, 서브스크립션 "에 값이 있다면 값을 반환, 없다면 nil을 반환한다.

( 옵셔널이 꼬리를 물고있는 모양 )

## 중첩된 Optional 중 하나라도 nil이라면, 결국 nil을 반환한다.

 

# Swift 옵셔널 체이닝이 아닌 ! (강제추출)을 사용할 경우

-   옵셔널에 값이 없다면 런타임 Error발생

-  반환 값이 옵셔널 타입이 아님!

 

# Swift 옵셔널 체이닝 예시

43번 줄과 같은 코드에서 옵셔널 체이닝이 진행되며, nil을 하나라도 마주치는 순간 다음 체인을 확인하지 않고 그대로 nil이 반환된다.

 

# Swift 옵셔널 체이닝 옵셔널 바인딩 사용

옵셔널 바인딩만을 사용하면, 47~54줄과 같이 코드가 매우 길어지며 가독성이 떨어진다. 

옵셔널 체이닝을 함께 사용하면, 간결하고 가독성 좋은 코드를 작성할 수 있다.

# Swift 옵셔널 체이닝을 이용 -> 값 할당 가능!

체이닝 도중 nil값을 마주치면 할당이 되지않고 끝나게 된다! 

 

## 아래와 같이 Optional Chaining은 메서드, 중첩함수, 서브스크립트 등에서도 사용할 수 있다.

서브스크립트에서 사용할 경우,

    아래처럼, 배열의 타입이 옵셔널인 경우, 접근할 때, []보다 앞쪽에 ?를 붙여줘야한다. 

    하지만 21~ 코드처럼 옵셔널 값을 갖는 배열인 경우는 직관적으로 드는 생각처럼 [] 뒷쪽에 ?를 붙여주면 된다.

# Swift 빠른 종료!

## 키워드 : guard

특징

- if문처럼 Bool값을 기준으로 동작.

- 항상 else구문이 따라와야함

- guard 뒤의 Bool값이 true인 경우 else뒷쪽의 코드가 계속 실행되고, false인 경우, else문이 실행된다.

- else문 안에서는 return, break, continue, throw, fatalError()와 같은 제어문 전환 명령이 사용되어야한다!

 

단점

- return, break, continue, throw등 제어문 전환 명령어를 쓸 수 없는 상황이라면, 사용이 불가능하다!!!

 

순수 guard문 사용

guard문을 사용한 옵셔널 바인딩

- guard let 을 사용하여 옵셔널 바인딩 된 상수는 해당 블록에서 지역상수로 사용될 수 있다!! 

-( if let을 통해 바인딩 된 상수는 if문 내에서만 사용가능)

- ,를 통해 여러 조건을 나열할 수 있다. ( 일반 Bool 조건옵셔널 바인딩 모두 가능 ) -> , 대신 &&로 써도 됨. 같은 의미이다.

 

관련글 더보기