模式匹配

import UIKit
import Foundation

/Swift 模式匹配**/

enum Weather {
case rain, snow, wind, sunny
}

let todayWeather = Weather.rain
switch todayWeather {
case .rain, .snow:
print("")

case .wind:
print("")

case .sunny:
print("")
}

enum Direction {
case east(angle: Int, length: Int), west(angle: Int, length: Int), south(angle: Int, length: Int), north(angle: Int, length: Int)
}
let curDirect = Direction.east(angle: 30, length: 1000)
switch curDirect {
case .east(let angle, _):
if angle > 10 {

}

case .west(let angle, _) where angle > 60:
print("")
case .south(let angle, _):
if angle > 10 {

}

case .north(let angle, _):
if angle > 10 {

}

default:
break
}

/原生类的匹配***/
let name = “Spiderman”

switch name {
case “Ironman”:
print(“钢铁侠”)
case “Spiderman”:
print(“蜘蛛侠”)
default:
print(“不认识”)
}

let point = (x: 10, y: 0)

switch point {
case (0, 0):
print(“原点”)
case (0, _):
print(“Y轴p偏移”)
case (let x, 0):
print(“X轴偏移:(x)”)
case (let x, let y) where x == y:
print(“X = Y”)
default:
break
}

let index = 100

switch index {
case 0…20:
print(“20以内”)
case 21:
print(“正好21”)
case 30…<100:
print(“30到100之间,不包括100”)
default:
print(“其它范围”)
}

/类型匹配***/
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 = [Dog.init(runSpeed: 55), Bird.init(flightHeight: 2000), Fish.init(depth: 100)] as [Any]

for animal in animals {
switch animal {
case let dog as Dog:
print("(dog.name) can run (dog.runSpeed)")
case let fish as Fish:
print("(fish.name) can dive depth (fish.depth)")
case is Bird:
print(“bird can fly!”)
default:
print(“unknown animal!”)
}
}

/自定义类型匹配***/

struct BodyFatRate {
var weight: Float
var fat: Float
}

let player = BodyFatRate(weight: 180, fat: 30)

/// 重载的~=操作符,简单的实现了体脂率BodyFatRate和range的匹配。该方法一共接收两个参数并返回一个bool类型的匹配结果。第一个参数lhs为case值,是体脂率的范围。第二个参数为switch传入的值player

func ~=(lhs: Range, rhs: BodyFatRate) -> Bool {
return lhs.contains(rhs.fat / rhs.weight)
}

switch player {
case 0.0…<0.15:
print(“难以置信”)
case 0.15…<0.2:
print(“健康”)
case 0.21…<0.99:
print(“该减肥了”)
default:
break
}

/高阶语法糖***/

if case let .rain(level) = todayWeather {
print(“雨的等级:(level)”)
}

if case let .rain(level) = todayWeather, level < 5 {
print(“下小雨”)
}

for case let .rain(level) in weatherInWeek where level > 5 {
print(“下大雨”)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值