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!"

 

감사합니다 :)