-
Swift Tips & Tricks) Pattern matching operator ~=Swift/Tips & Tricks 2021. 10. 12. 00:45
Pattern matching operator ~=
어떤 값이 어떠한 범위에 포함되어있는지에 대해서 조건을 입력할 때는
보통 if 문 안에 conditions 두개를 && 로 연결해서 사용했었는데요,
if number >= 0 && number <= 5 { print("number is in the range ") }
하지만, 더 편하게 할 수 있는 방법도 있습니다. 그것은 바로 '~=' operator. 간단한 사용법은 다음과 같아요.
if 0 ... 5 ~= number { print("number is in the range") }
Swift 에서 option + click 한 결과, 설명은 다음과 같았어요.
간단히 번역하자면,
Summary
값이 범위 내에 있는지에 대해 알려줄 Bool 값을 반환합니다.
Discussion
pattern-matching operator(~=) 을 사용해서 값이 범위 내에 있는지 확인할 수 있습니다. 케이스를 나누는 문장에서 사용합니다. (if, switch-case) 아래 예시에서는 ~= operator 를 integer 가 single-digit 인지 확인 하는 데에 사용하였습니다.Int 값 뿐만이 아니라 String 에 대해서도 비교했을 때 같은게 적용되는 것을 확인하였고, 적용범위가 어디까지인지 찾아보았고, Apple 에 다음과 같은 문서가 있었습니다.
핵심만 말씀드리자면, Equatable protocol 을 conform 하는 type 에 대하여 '~=' 를 사용할 수 있습니다.
즉, '==' operator 가 사용 가능한 type 이면 쓸 수 있다는 것이지요. 그렇다면, 기본 타입 (String, Char, Int, Float, Double, Bool 등 도 당연히 되겠네요!) (Bool 은 가능하긴 한데.. 굳이 쓸 일이 있을까 싶어요.. )
참고
if 0 ... 10 ~= number
와 같이 '...' 와 함께 쓰시려면, ... (range operator) 앞뒤에 쓰일 값의 type 은 (위 경우 0, 10)
'Comparable' protocol 을 만족해야합니다.아래는 Swift 에서 많이 사용하는 pattern 중 하나를 첨부할게요. url을 보내고 response 를 받는 function 입니다. Response statusCode 에 따라 성공인지 실패인지 알려주는 코드이고, 여기서 '~=' operator 가 쓰였어요 !
func getResponse( completionHandler: @escaping (Bool, Any) -> Void) { guard let url = URL(string: "someURL") else { print("cannot create url") return } var request = URLRequest(url: url) request.httpMethod = "GET" URLSession.shared.dataTask(with: request) { data, response, error in guard error == nil else { print("Error: error calling GET") print(error!) return } guard let _ = data else { print("Error: Did not receive data") return } guard let response = response as? HTTPURLResponse, (200 ..< 300) ~= response.statusCode else { print("Error: HTTP request failed") return } completionHandler(true, response) }.resume() }
기본적인 operator 외에 다른 것들에 대해서도 공부하고 싶으시다면, 아래 링크를 참고해서 해보셔도 좋을 것 같습니다 !
( Swift - Advanced Operators )
https://docs.swift.org/swift-book/LanguageGuide/AdvancedOperators.html
Advanced Operators — The Swift Programming Language (Swift 5.5)
Advanced Operators In addition to the operators described in Basic Operators, Swift provides several advanced operators that perform more complex value manipulation. These include all of the bitwise and bit shifting operators you will be familiar with from
docs.swift.org
'Swift > Tips & Tricks' 카테고리의 다른 글
Swift 개발 / 배포 코드 다르게 하기 (if DEBUG) (0) 2022.04.08 Rx Swift Cocoa pods 로 설치하기, playground 연습 환경 구축 (0) 2022.03.23 Swift Tips and Tricks - .enumerated() (0) 2021.10.12 Swift Language) sort, map, filter, reduce (0) 2021.09.29 Swift Tips & Tricks - defer (0) 2021.09.14