Swift
~= 연산자 in Swift
삼쓰 웅쓰
2020. 7. 7. 16:52
728x90
오늘은
~=
연산자에 대해서 알아보겠습니다.
~= 연산자
~= 연산자는 대상이 특정 범위에 속하는지 범위를 체크하는 연산자 입니다.
저희가 많이 사용하는 switch 구문에 바로 이 ~= 연산자가 사용됩니다.
case 의 범위를 확인할 때 내부적으로 ~= 연산자가 불려서 사용되고 있는 것이죠.
~= 연산자는 비교 연산자 == 의 변형? 확장된 상태로 생각할 수 있겠습니다.
두 대상이 같은지 단순 비교할 때 == 연산자와 달리 대상이 어떤 범위에 속하는지 확인합니다.
숫자 5가 0~ 10 사이일 때 10을 곱해주려면 이렇게 할 수 있습니다.
var n = 5
if 0..<10 ~= n {
n *= 10
}
print(n) // 50
문자열에도 사용할 수 있습니다. str이 "a"~"z"를 포함하는지 찾고 싶다면
func checkLowercase(str: String) -> Bool {
if "a"..."z" ~= str {
// str contain lowercased alpabet
return true
} else {
// Not found lowercased alpabet
return false
}
}
checkLowercase(str: "a") // true
checkLowercase(str: "aA") // true
checkLowercase(str: "A") // false
패턴 매칭
앞서 switch 구문에서 ~= 연산자가 사용된다고 말씀드렸는데요,
따라서 ~= 연산자를 재정의하면 서로 다른 타입도 switch 연산으로 처리할 수 있습니다.
이렇게 활용할 수 있습니다.
struct Person {
let name : String
}
func ~=(pattern: String, value: Person) -> Bool {
return value.name == pattern
}
let person = Person(name: "woongs")
switch person {
case "woongs":
print("Hello woongs!")
default:
print("Sorry")
}
// Output: "Hello woongs!"
if case "woongs" = person {
print("Hello woongs!")
}
// Output: "Hello woongs!"
감사합니다 :)