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("未知情况")

}

Swift中的模式分类相关推荐

  1. 解决Swift中present(uiImagePickerController,animated: true,completion: nil)闪退的问题

    swift中开发选择图片上传,会使用到Tap Gesture Recognizer控件,对应 UITapGestureRecognizer API,以下是代码示例(取自IOS developer li ...

  2. Swift 中使用 SQLite——批量更新(事务处理)

    本文是Swift 中使用 SQLite系列的收官之作,介绍一下在数据库中的批量更新. 事务 在准备做大规模数据操作前,首先开启一个事务,保存操作前的数据库的状态 开始数据操作 如果数据操作成功,提交事 ...

  3. Swift 中使用 SQLite——打开数据库

    关于Swift中使用SQLite,接下来可能会分别从打开.增.删.改.查,几个方面来介绍SQLite的具体使用,这一篇重点介绍一下如何打开. 定义全局数据库访问句柄 /// 全局数据库访问句柄 pri ...

  4. 探索 Swift 中的 MVC-N 模式

    作者:Marcus Zarra(twitter:@mzarra) Marcus 将会为大家介绍一种设计模式,他曾经在那些需要从互联网进行大量频繁数据请求的 iOS 应用当中使用此设计模式.这个设计采用 ...

  5. Swift 中的内存管理详解

    这篇文章是在阅读<The Swift Programming Language>Automatic Reference Counting(ARC,自动引用计数)一章时做的一些笔记,同时参考 ...

  6. 怎样在swift中创建CocoaPods

    本文由yake_099(博客)翻译自raywenderlich,作者:Joshua Greene 原文:How to Create CocoaPods with Swift 你可能对一些比较著名的开源 ...

  7. Swift中编写单例的正确方式

    本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...

  8. Swift中依赖注入的解耦策略

    原文地址:Dependency Injection Strategies in Swift 简书地址:Swift中依赖注入的解耦策略 今天我们将深入研究Swift中的依赖注入,这是软件开发中最重要的技 ...

  9. swift设置启动图不现实_如何通过装饰房屋来开始在Swift中使用增强现实

    swift设置启动图不现实 by Ranadhir Dey 由Ranadhir Dey 如何通过装饰房屋来开始在Swift中使用增强现实 (How to get started with augmen ...

最新文章

  1. AI一分钟 | 小米公布Q2财报,上市以来股价振幅高达30%;俄制造商推出步行杀手机器人...
  2. 【转】Eclipse的Debug调试技巧大全
  3. Spring AOP增强(Advice)
  4. 吃饱了,就来写点东西吧。讲一个真实的故事给你长自信
  5. dev中循环展示图片的样式怎么写_图中的这种样式怎么用HTML写?
  6. sourcetree 推送找不到bash.exe_找旅伴 | 周末轻旅行
  7. mac下Python2运行SparkSQL
  8. 亲测!Jquery2.0不支持IE8-了
  9. opencv cv2.copyMakeBorder()函数详解
  10. 【微信支付开发流程】
  11. java 结合groovy,Groovy教程:Groovy和Java的相互调用及简单对比
  12. (伪)点到线段的距离 C++
  13. Oracle Database XE(免费)的数据库下载安装使用教程-第一篇
  14. element 绘制饼状图(复制代码直接用),付效果图
  15. 「鹿班智能设计平台」是如何工作的
  16. Python读取,写入,保存txt文件
  17. 使用Teleport Ultra批量克隆网站,使用Easy CHM合并生成chm文件
  18. 丰富的层次感,打造190㎡现代简约居住空间
  19. numpy的文件存储.npy .npz 文件详解
  20. 国内顶级经济类期刊有哪些?

热门文章

  1. flink入门实战总结
  2. Netflix网关zuul(1.x和2.x)全解析
  3. Adapter pattern
  4. 从websphere6.1迁移到weblogic10.3的问题总结--转
  5. 解决两台centos虚拟机Telnet服务无法联机的问题
  6. SQL Server 2005 Sa 用户的启用
  7. 【人脸检测】学界 | 中科院自动化研究所提出 FaceBoxes:实时、高准确率的 CPU 面部检测器
  8. 没用过这些 IDEA 插件?怪不得写代码头疼
  9. Docker Review - dockerfile 实战_给基础镜像增加功能
  10. Java-COW在Java中的应用