Swift中的模式分类

Swift有下面这些模式:

通配符模式(Wildcard Pattern)、标识符模式(Identifier Pattern)、值绑定模式(Value-Binding Pattern)、元组模式(Tuple Pattern)

、枚举用例模式(Enumeration Case Pattern)、可选项模式(Optional Pattern)、类型转换模式(Type-Casing Pattern)、表达式模式(Expression Pattern)

简单的介绍一些这些模式吧

!!!!!!!!!!!! !

通配符模式:由一个下划线构成 ( _ ),用于匹配并忽略调任何值。

举例:

for _ in 1...3 {

    print("看一下结果")

}

标识符模式:标识符模式匹配任何值,并将匹配的值和一个变量或常量绑定起来。

举例:

let numT: UInt = 5

var length: String = 8

值绑定模式:把匹配到的值绑定给一个常量或变量。

举例:

let point = (3,2)

switch point {

// 将point中的元素绑定到x和y

case let (x,y):

    print("x is \(x),y is \(y)")

default:

    print("默认选项")

}

元组模式:元组模式由逗号分隔,具有零个或多个模式的列表,并由一对圆括号括起来。

举例:(3,2)

枚举用例模式:匹配现有的某个枚举的某个用例。枚举用例模式出现在switch语句中的case标签中,以及if、while、guard和for-in语句的case条件中。

  public enum AnimationTransition : Int {

        case none

        case flipFromLeft

        case flipFromRight

        case curlUp

        case curlDown

    }

可选项模式:可选项用 ?表示,可选项模式为for-in语句提供了一种迭代数组的简便方式,只为数组中非nil的元素执行循环体

举例:

let arr: [Int?] = [nil,5,8,0,nil,7]

for case let num? in arr {

    print(num)

}

类型转换模式:有两种类型转换模式,is模式和as模式。is模式只出现在switch语句中的case标签中。形式如下

is 类型:is模式仅当一个值的类型在运行时和is模式右边的指定类型一致,或者是其子类的情况下,才会匹配这个值。is模式没有返回类型

模式 as 类型:as模式仅当一个值的类型在运行时和as模式右边的指定类型一致,或者是其子类的情况下,才会匹配这个值。如果匹配成功,被匹配的值的类型

protocol Animal {

    var name: String { get }

}

struct Dog: Animal {

    var name: String = "dog"

    var runSpeen: Int

}

struct Bird: Animal {

    var name: String = "bird"

    var flightHright: Int

}

struct Fish: Animal {

    var name: String = "fish"

    var depth: Int

}

let animals:[Any] = [Dog(name: "Tydi", runSpeen: 5),Bird(flightHright: 8),Fish(depth: 9)]

for animal in animals {

    switch animal {

    case let dog as Dog:

        print("name:\(dog.name),跑得快\(dog.runSpeen)")

    case let bird as Bird:

        print("name is \(bird.name)")

    default:

        print("未知种类\(animal)")

    }

}

表达式模式:表达式的值,只出现在switch语句的case标签中。表达式模式代表的表达式会使用~=运算符与输入表达式的值进行比较。~=运算符可以查看一个范围是否包含某个值,如果~=运算符返回true,则匹配成功。

举例:

let point = (2,3)

switch point {

case (0,0):

    print("原点")

case (-2...2,-3...3):

    print("离原点较近")

default:

    print("X坐标\(point.0)Y坐标\(point.1)")

}

自定义类型无法进行表达式模式匹配,需要重载~=运算符

举例:

struct Employee {

    var salary: Int

}

let A = Employee(salary: 450)

func ~=(left:Range<Int>,right:Employee) -> Bool {

    return left.contains(right.salary)

}

switch A {

case 0..<200:

    print("艰难生活")

case 200..<400:

    print("还不错")

case 400..<500:

    print("美滋滋")

default:

    print("未知情况")

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值