1、其中匹配模式
通配符模式
忽略匹配的值
_
_?
:匹配值不能是nil,可匹配可选值,表示确保存在
标示模式
匹配一个具体的值
case 5: ....
值绑定
case let ... :
元组模式
同时匹配多个值
1 | //提取age,确保job存在、payload是NSDictionary类型 |
枚举case
1 | enum Entities { |
类型转换模式
is
类型:匹配右手边内容的运行时类型(或者类型的子类)。它会做类型转换但是不关注返回值。所以你的case
块不知道所匹配的类型是什么。- 模式
as
类型:和is
模式做同样的匹配操作,但是如果成功的话会把类型转换到左侧指定的模式中。
1 | let a: Any = 5 |
表达模式
case <expresion>
可以通过重写~=
操作符来实现自定义的表达式:
1 | protocol Entity { var value: Int {get} } |
2、if、for、guard语句中的case
1 | enum Entity { |
for case
1 | for case let Entity.Entry(t, x, y, _) in gameEntities() |
guard case
1 | func healthHP(entity: Entity) -> Int { |
if case
1 | func move(entity: Entity, xd: Int, yd: Int) -> Entity { |
解构类和结构体
定义unapply方法来解构,和init功能相反
1 | struct Imaginary { |