Swift学习25:Swift中的模式和模式匹配
模式
模式代表
单个值或复合值
的结构
,可以用模式来匹配各种各样的值,例如:(x,y) 匹配 元组(1,2)
可以从复合值中取出部分或全部值,然后把值绑定一个常量或变量,例如:(let x,y) 提取 (1,2)
模式分类
Swift
中模式分为两类: 一种能成功匹配任何类型的值
;另一种在运行时匹配某个特定值可能会失败
第一种模式用于解构简单的常量、变量和可选绑定中的值
第二种模式用于全模式匹配。
模式分类:
- 通配符模式(Wildcard Pattern)
- 标识符模式(Identifier Pattern)
- 值绑定模式(Value-Binding Pattern)
- 元组模式(Tuple Pattern)
- 枚举用例模式(Enumeratinal Case Pattern)
- 可选项模式(Optional Pattern)
- 类型转换模式(Type-Casting Pattern)
- 表达式模式(Expression Pattern)
通配符模式(Wildcard Pattern)
- 通配符模式(Wildcard Pattern) 用一个下划线
_
构成,用于匹配并忽略任何职
1 | for _ in 1...3 { |
标识符模式(Identifier Pattern)
- 标识符模式匹配任何值,并将匹配的值和一个变量或常量绑定起来
1 | let someValue = 42 |
值绑定模式(Value-Binding Pattern)
- 把匹配到的值绑定给一个
变量let或常量var
1 | let point = (2,3) |
元组模式(Tuple Pattern)
- 元组模式由逗号分割,具有零个或多个模式的列表,由一对圆括号括起来。
1 | let points = [(0,0),(0,1),(1,1)] |
枚举用例模式(Enumeratinal Case Pattern)
- 匹配现有某个枚举类型的某个用例,体现在
switch
中case
标签中,及if、while、guard
和for in
的case
中
可选项模式(Optional Pattern)
匹配
Optional<Wrapped>
枚举在some<Wrapped>
中包装的值可选项模式为
for in
语句提供了一种迭代数组的简便方式,只为数组中的非nil
元素执行循环体
1 | let someNum: Int? = 10 |
类型转换模式(Type-Casting Pattern)
有两种:
is模式
和as模式
,is
模式只出现在switch
语句case
标签中is
类型:仅当一个值类型在运行时和is模式
右边指定的类型一致,或子类下,才匹配值,没有返回类型模式
as
类型:仅当一个值类型在运行时和as模式
右边指定的类型一致,或子类下,才匹配值,如果匹配成功,被转换成as模式右边指定的类型
1 | protocol Animal { |
表达式模式(Expression Pattern)
表达式模式代表表达式的值,只出现在
switch
语句中的case
标签中可重载
~=
运算符来提供自定义的表达式匹配行为自定义类或结构体类型
默认也是无法进行表达式模式匹配的,也需要重载~=
运算符
1 | struct Employee{ |
- Post title:Swift学习25:Swift中的模式和模式匹配
- Post author:张建
- Create time:2023-02-23 21:36:05
- Post link:https://redefine.ohevan.com/2023/02/23/Swift课程/Swift学习25:Swift中的模式和模式匹配/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.