시나리오 : Swift에서 Elvis operator(엘비스 연산자)를 구현해 보았다.
옵셔널값을 사용하기 위해서는 우리는 [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
엘비스 연산자란?
엘비스 프레슬리의 머리 스타일처럼 생겼다고 해서 붙여진 연산자라고 한다.
코틀린에서 엘비스 연산자사용법은 ?: 의 왼쪽 객체가 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
동작은 동일하게 된다. 나름 엘비스 연산자와 비슷해서 내심 뿌-듯하다.
[Xcode] 앱 배포시 '빌드 진행한 시각' 추가하는 스크립트 만들기 - Running custom scripts during a build (0) | 2023.10.20 |
---|---|
[ios network link conditioner] 네트워크 속도 테스트 해보기 (2) | 2023.10.11 |
[Swift tips] 지금 바로 적용해보는 Swift 최적화 팁! (0) | 2023.08.09 |
[Swift+UIKit+Code base UI] 코드베이스 UI에서 Preview 보는 방법 (0) | 2022.04.10 |
[Tricks&Tips]강제업데이트 앱버전 비교하기 & 앱 업데이트 새로고침 하는 방법-02 (0) | 2022.02.22 |
댓글 영역