저번 포스팅에서 Swift의 기본 연산자에 대해 알아 보았다. 기본 연산자는 프로그래밍 언어의 공통적인 부분이라면, 이번 내용은 '옵셔널(optional)'이라는 자료형이 있는 Swift만의 독특한 연산자라 할 수 있다.
📌 Nil 결합 연산자의 기본 형식
Nil 결합 연산자의 기본 형식은 a ?? b인데, 옵셔널 a가 값이 있으면 a를 언래핑하고, a가 nil일 경우 default 값인 b를 반환한다.
a ?? b
a는 항상 옵셔널 타입이여야 하고, b는 a와 같은 자료형이어야 한다.
📌 삼항 조건 연산자로 표현 했을 때
삼항 조건 연산자로 표현하면 아래와 같다
a != nil ? a! : b // a가 nil이 아닐 경우 a를 언래핑하여 할당, nil일 경우 b를 할당
📌 실습
(1) 옵셔널을 정의할 경우
변수 하나는 직접 값을 할당했고, 다른 하나는 옵셔널로 정의했다.
let defaultFontColor = "black" // "black"
var userDefinedColor: String? // nil
var colorToUse = userDefinedColor ?? defaultFontColor // "black"
- userDefinedColor의 타입이 *Optional<String>*이고 값이 nil이므로
- 변수 colorToUse에 defaultFontColor의 값을 반환한다.
(2) 옵셔널을 정의하지 않을 경우
변수 두 개에 직접 값을 할당했다.
let defaultFontColor = "black" // "black"
var userDefinedColor = "blue" // "blue"
var colorToUse = userDefinedColor ?? defaultFontColor // "blue"
- 두 변수가 실제로 nil이 아닌 값이 할당되어서
- 변수 colorToUse에 userDefinedColor의 값을 반환한다.
단축 평가(short-circuit evaluation)
이렇게 되면 연산자 우측의 default 값을 절대로 쓰이지 않게 되는데 이를 단축 평가(short-circuit evaluation)라 한다.
단축 평가의 경우에는 아래와 같은 경고 메시지가 나온다.
Left side of nil coalescing operator '??' has non-optional type 'String', so the right side is never used
'iOS > Swift' 카테고리의 다른 글
[Swift] 문자열은 참조 타입이 아닌 값 타입이다? (0) | 2023.04.24 |
---|---|
[Swift] 배열과 튜플의 차이점 (2) | 2023.04.24 |
[Swift] 문자열 리터럴(String Literals) (0) | 2023.04.08 |
[Swift] 기본 연산자(Basic Operators) (0) | 2023.04.06 |
[Swift] OT - 독학 사이트와 강의 모음 (0) | 2023.03.27 |
댓글