let a = 1
switch a {
case 0...10: // 에러가 나지 않는 이유는 Expression Pattern을 통해 정수와 범위를
매칭 시킬수 있도록 구현 되어있기 떄문이다.
print("0 ~ 10")
default:
break
}
Pattern Matching Operator
a ~= b
사용자 정의를 통해 매칭 시킬수 있는 연산자를 만들수 있따. 이 연산자는 이항 연산자로 ~=합처진 형태로 오버라이팅해 패턴 매칭의 결과를 자유롭게 리턴하고 보통은 ==과 동일한 역할을 리턴하도록 한다
struct Size {
var width = 0.0
var height = 0.0
// 첫번쨰 자료형은 케이스 키워드 다음에 오는 패턴의 자료형으로 작성해야 하며
두번째 파라미터는 switch 다음에 오는 value의 자료형으로 지정해야 합니다.
static func ~=(left : Range<Int>, right : Size) -> Bool {
return left.contains(Int(right.width))
}
}
let s = Size(width: 10, height: 20)
switch s {
case 1..<9:
print("1 ~ 9")
case 10..<99:
print("10 ~ 99") // 이블록이 실행된다.
default:
break
}