ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ~= 연산자 in Swift
    Swift 2020. 7. 7. 16:52

    오늘은

    ~= 

    연산자에 대해서 알아보겠습니다.

     


     

    ~= 연산자

    ~= 연산자는 대상이 특정 범위에 속하는지 범위를 체크하는 연산자 입니다.
    저희가 많이 사용하는 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!"
    

     

    감사합니다 :)

    'Swift' 카테고리의 다른 글

    람다 λ lambda  (0) 2020.08.04
    Reduce  (0) 2020.08.04
    Hashable in Swift 5  (0) 2020.06.25
    associatedType  (2) 2020.03.18
    @discardableResult  (0) 2020.03.18

    댓글

Designed by Tistory.