iOS/Swift
[Swift] Nil 결합 연산자(Nil-Coalescing Operator)
Dev.Andy
2023. 4. 11. 19:12
저번 포스팅에서 Swift의 기본 연산자에 대해 알아 보았다. 기본 연산자는 프로그래밍 언어의 공통적인 부분이라면, 이번 내용은 '옵셔널(optional)'이라는 자료형이 있는 Swift만의 독특한 연산자라 할 수 있다.
[Swift] 기본 연산자(Basic Operators)
📌 용어(Terminology) 1. 단항 연산자(Unary Operator) 단일한 항목(single targets)에 작동하는 연산자. 접두사(prefix)와 접미사(postfix)로 나누어짐. var a, b, c -a b c! 2. 이항 연산자(Binary Operator) 2개의 항목(two ta
andy-archive.tistory.com
📌 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