[머릿말]
프로그래머스에서 문제를 풀고 다른 사람의 풀이를 보던 중 새로운 연산자를 보게 되었다. 파이썬에서 바다 코끼리 연산자(:=)를 처음 보았을 때 느꼈던 기분이었다😀
1. ~=(_:_:) 연산자 [범위 확인 연산자]
공식 문서에서의 내용은 다음과 같다.
"값이 범위에 포함되는지를 나타내는 Boolean 타입 값을 반환한다."
범위에 값이 포함되어 있는지, 즉 contains 메서드와 같은 기능을 하는 연산자라고 보면 된다.
사용 방법은 아래 예제와 같다.
print(1...10 ~= 5) // true
print(1...10 ~= 11) // false
if 1..<10 ~= 10 { // false
print("범위에 포함됩니다.")
} else {
print("범위에 포함되지 않습니다.")
}
value가 pattern에 포함되면 true, 그렇지 않으면 false가 반환된다.
2. ~=(_:_:) 연산자 [패턴 매치 연산자]
이 연산자는 패턴 매치(Pattern Match)의 기능도 수행한다. 공식 문서에서의 내용은 다음과 같다.
"두 매개변수가 같은 값으로 매치되는지를 나타내는 Boolean 타입 값을 반환한다."
이 연산자는 switch ~ case 구문에서 내부적으로 사용되어 왔다고 한다.
위 예제 코드에서 weekday 변수의 값은 3이므로 case 3: 부분에서 ~= 연산자가 내부적으로 호출되고 있다는 것이다.
2-1. 연산자 오버라이딩
이 연산자를 오버라이딩(Overriding)하여 switch ~ case 구문에서 사용할 수도 있다.
func ~=(caseValue: Int, conditionValue: String) -> Bool {
return String(caseValue) == conditionValue
}
let a: String = "12345"
switch a {
case 12345:
print("일치") // 일치
default:
print("불일치")
}
위 예제에서 caseValue가 case 부분에 해당하는 값이고, conditionValue가 switch 조건 변수에 해당하는 값이다. 두 변수명은 아무렇게나 지어도 상관없다.
String 타입으로 선언된 변수 a를 정수 12345와 비교하기 위해 연산자를 오버라이딩하였다. caseValue에 정수 12345가, conditionValue에 변수 a의 값 "12345"가 전달되어 String(12345) == "12345" 문장이 실행되어 true가 반환된다.
끝!
'[Programming Language] > [Swift]' 카테고리의 다른 글
[Swift] 프로퍼티(Property) [Stored •Computed, getter, setter, read-only] (8) | 2024.11.05 |
---|---|
[Swift] 구조체(Structure) vs 클래스(Class) 차이점 (4) | 2024.11.04 |
[Swift] String.allSatisfy(_:) 함수란? (0) | 2024.09.23 |
[Swift] SubSequence(ArraySlice)를 그냥 사용하는 것과 저장하고 사용하는 것의 속도 차이가 발생하는 이유는? (1) | 2024.09.22 |
[Swift] ASCII Code 변환 방법(숫자 <-> 문자 변환 방법) (0) | 2024.08.22 |