31 Swift中的模式和模式匹配

模式代表单个值或者复合值的结构

Swift 中的模式分为两类:一种能成功匹配任何类型的值,另一种在运行时匹配某个特定值时可能会失败。

第一类模式用于解构简单变量、常量和可选绑定中的值。此类模式包括通配符模式、标识符模式,以及包含前两种模式的值绑定模式和元组模式。可以为这类模式指定一个类型标注,从而限制它们只能匹配某种特定类型的值。
第二类模式用于全模式匹配,这种情况下试图匹配的值在运行时可能不存在。此类模式包括枚举用例模式、可选模式、表达式模式和类型转换模式。在switch 语句的case标签中,do 语句的catch子句中,或者在if、while、guard和for-in语句的case条件句中使用这类模式。

let someNumber:Int? = 10
        if case .some(let x) = someNumber {
        /* some 关键字在 Swift 5.1版本 中被引入,定义为一个 不透明类型 。 不透明类型是一种而无需提供具体类型的返回类型。 限制调用者需要了解的有关返回类型的信息,仅仅公开有关其协议遵从性的信息。
         */
            print(x)
        }
        
        if case let x? = someNumber {
            print(x)
        }
---------------------------------------------------------
protocol Animal{
    var name: String { get }
}

struct Dog:Animal {
    var name: String{
        return "dog"
    }
    var runSpeed:Int
}

struct Bird:Animal {
    var name: String{
        return "bird"
    }
    var flightHeight:Int
}

struct Fish:Animal {
    var name: String{
        return "fish"
    }
    var depth:Int
}

let animals:[Any] = [Dog(runSpeed: 40),Bird(flightHeight: 9000),Fish(depth: 200)]

for animal in animals{
    switch animal{
    case let dog as Dog:
        print("\(dog.name) run at \(dog.runSpeed)")
    case let fish as Fish:
        print("\(fish.name) run at \(fish.depth)")
    case is Bird:
        print("bird can fly")
        
    default:
        break
    }
}

print:
dog run at 40
bird can fly
fish run at 200
---------------------------------------------

struct Employee{
    var salary :Int
}

func ~= (left:ClosedRange<Int>,right:Employee) -> Bool{
    return left.contains(right.salary)
}

var e:Employee = Employee(salary: 2000)

switch e{
case 0...1000:
    print("吃不饱")
case 1000...5000:
    print("勉强度日")
case 5000...10000:
    print("还不错")
default:
    print("高薪阶层")
}

print:勉强度日

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值