可以重载 〜= 运算符提供自定义表达式匹配行为:
//全局声明:class外部,否则报错
func ~= (pattern: String, value: Int) -> Bool {
return pattern == "(value)"
}
let point = (9,14)
switch point {
case ("9","14")://若不重载则会报错
print("表达式模式使用`~=`精准匹配:((point.0),(point.1))")
fallthrough
case (5..<10,0...20):
print("表达式模式使用`~=`范围匹配:((point.0),(point.1))")
default:
print("未匹配")
}
介绍完模式,接下来我们举例来说明模式在 Any 和 AnyObject 的类型转换的使用。 示例一:
var things : [Any] = [0, 0.0, 42, 3.14159, "hello", (3.0, 5.0),
WhiteCat(),{ (name: String) -> String in "Hello, (name)" } ]
for thing in things {
switch thing {
case 0 as Int:
print("`as`模式匹配两部分,pattern:表达式模式(`0`),type:匹配类型(`Int`),匹配结果:0")
case (0) as Double:
print("`as`模式匹配两部分,pattern:表达式模式(`0`),type:匹配类型(`Double`),匹配结果:0.0")
case is Double:
print("`is`模式匹配`Double`类型的值,值类型与`is`右侧类型及子类相同时,执行此句")
case let someInt as Int:
print("`as`模式匹配两部分,pattern:值绑定模式(`let someInt`),type:匹配类型(`Int`),匹配结果:(someInt)")
case _ as Int:
print("`as`模式匹配两部分,pattern:通配符模式(`_`),type:匹配类型(`Int`),匹配结果被忽略")
case let someDouble as Double where someDouble > 0:
print("`as`模式匹配两部分,pattern:值绑定模式(`let someDouble`),type:匹配类型(`Double`),匹配结果:(someDouble)")
case let someString as String:
print("`as`模式匹配两部分,pattern:值绑定模式(`let someString`),type:匹配类型(`String`),匹配结果:(someString)")
case let (x, y) as (Double, Double):
print("`as`模式匹配两部分,pattern:元组模式(`let (x, y) `),type:匹配类型(元组`(Double, Double)`),匹配结果:((x, y))")
fallthrough
case (2.0...4.0, 3.0...6.0) as (Double, Double):
print("`as`模式匹配两部分,pattern:表达式模式(`(2.0...4.0, 3.0...6.0) `),type:匹配类型(元组`(Double, Double)`))")
case let cat as WhiteCat:
print("`as`模式匹配两部分,pattern:值绑定模式(`let cat`),type:匹配类型(对象`WhiteCat`),匹配结果:(cat)")
case let sayHelloFunc as (String) -> String:
print("`as`模式匹配两部分,pattern:值绑定模式(`let sayHelloFunc`),type:匹配类型(函数`(String) -> String`),匹配结果:(sayHelloFunc("QiShare"))")
default:
print("其他结果,未匹配到")
}
}
示例二:
let point = (9,14)
switch point {
case (9,14):
print("表达式模式使用`~=`精准匹配::((point.0),(point.1))")
fallthrough
case (5..<10,0...20):
print("表达式模式使用`~=`范围匹配:((point.0),(point.1))")
default:
print("未匹配")
}
参考资料: swift 5.1官方编程指南








