상세 컨텐츠

본문 제목

Elvis Operator in Swift

iOS 캐기/Tricks & Tips 캐기

by Atlas 2023. 8. 14. 15:13

본문

728x90
반응형

시나리오 : Swift에서 Elvis operator(엘비스 연산자)를 구현해 보았다.

 

source : giphy -https://giphy.com/gifs/lilo-and-stitch-PGMqSJcVexVEQ

옵셔널값을 사용하기 위해서는 우리는 [guard let , if let , 병합연산자] 등을 각 개발자의 취향이나 상황에 맞게 사용하고 있을 것이다. 

let optionalValue: Int? = nil

//guard let 
guarl let result = optionalValue else { return 0 }
return result 

//if let 

if let result = optionalValue {

}else{

}

// 병합연산자 (NilCoalescing)
let result = optionalValue ?? 0

 

엘비스 연산자란?

 

via GIPHY

 

엘비스 프레슬리의 머리 스타일처럼 생겼다고 해서 붙여진 연산자라고 한다. 

코틀린에서 엘비스 연산자사용법은  ?: 의 왼쪽 객체가 non-null이면 그 객체의 값이 return, null이라면 ?:의 오른쪽 값을 리턴한다. (사실상 swift문법의 병합연산자와 동일하다 )

var optionalString: String? = null

val result = optionalString ?: "default"

 

병합연산자로 쓰면 되지...만!!!  엘비스 연산자로 구현해보고싶어졌다. (사서 고생..ㅠㅠ) 삽질은 개발자의 3대 미덕 중 하나니까 해보자!

결론은 불가능했다. 😭

스위프트에서 삼항연산자문법으로 인해 내장되어있는 '?:' 연산자를 모방한 새로운 연사자를 만들 수가 없기 때문이다. 

let result = value ? A : B

 

하지만 비슷하게라도 해보고 싶은? 마음에 '?= ' 로 해보았다.

 

infix operator ?= : NilCoalescingPrecedence

extension Optional {
    static func ?= (lhs: Optional, rhs: @autoclosure () -> Wrapped) -> Wrapped {
        switch lhs {
            case .some(let value):
                return value
            case .none:
                return rhs()
        }
    }
}

 

사용법 

let optionalValue: Int? = nil
let defaultValue = 10
let result = optionalValue ?= defaultValue
print(result) // Output: 10

let iOSNilCoalescing = optionalValue ?? 10 // 병합연산자 
print(iOSNilCoalescing) // Output: 10

 

동작은 동일하게 된다. 나름 엘비스 연산자와 비슷해서 내심 뿌-듯하다.

 

 

반응형

관련글 더보기

댓글 영역