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("未知情况")
}
Swift中的模式分类相关推荐
- 解决Swift中present(uiImagePickerController,animated: true,completion: nil)闪退的问题
swift中开发选择图片上传,会使用到Tap Gesture Recognizer控件,对应 UITapGestureRecognizer API,以下是代码示例(取自IOS developer li ...
- Swift 中使用 SQLite——批量更新(事务处理)
本文是Swift 中使用 SQLite系列的收官之作,介绍一下在数据库中的批量更新. 事务 在准备做大规模数据操作前,首先开启一个事务,保存操作前的数据库的状态 开始数据操作 如果数据操作成功,提交事 ...
- Swift 中使用 SQLite——打开数据库
关于Swift中使用SQLite,接下来可能会分别从打开.增.删.改.查,几个方面来介绍SQLite的具体使用,这一篇重点介绍一下如何打开. 定义全局数据库访问句柄 /// 全局数据库访问句柄 pri ...
- 探索 Swift 中的 MVC-N 模式
作者:Marcus Zarra(twitter:@mzarra) Marcus 将会为大家介绍一种设计模式,他曾经在那些需要从互联网进行大量频繁数据请求的 iOS 应用当中使用此设计模式.这个设计采用 ...
- Swift 中的内存管理详解
这篇文章是在阅读<The Swift Programming Language>Automatic Reference Counting(ARC,自动引用计数)一章时做的一些笔记,同时参考 ...
- 怎样在swift中创建CocoaPods
本文由yake_099(博客)翻译自raywenderlich,作者:Joshua Greene 原文:How to Create CocoaPods with Swift 你可能对一些比较著名的开源 ...
- Swift中编写单例的正确方式
本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...
- Swift中依赖注入的解耦策略
原文地址:Dependency Injection Strategies in Swift 简书地址:Swift中依赖注入的解耦策略 今天我们将深入研究Swift中的依赖注入,这是软件开发中最重要的技 ...
- swift设置启动图不现实_如何通过装饰房屋来开始在Swift中使用增强现实
swift设置启动图不现实 by Ranadhir Dey 由Ranadhir Dey 如何通过装饰房屋来开始在Swift中使用增强现实 (How to get started with augmen ...
最新文章
- AI一分钟 | 小米公布Q2财报,上市以来股价振幅高达30%;俄制造商推出步行杀手机器人...
- 【转】Eclipse的Debug调试技巧大全
- Spring AOP增强(Advice)
- 吃饱了,就来写点东西吧。讲一个真实的故事给你长自信
- dev中循环展示图片的样式怎么写_图中的这种样式怎么用HTML写?
- sourcetree 推送找不到bash.exe_找旅伴 | 周末轻旅行
- mac下Python2运行SparkSQL
- 亲测!Jquery2.0不支持IE8-了
- opencv cv2.copyMakeBorder()函数详解
- 【微信支付开发流程】
- java 结合groovy,Groovy教程:Groovy和Java的相互调用及简单对比
- (伪)点到线段的距离 C++
- Oracle Database XE(免费)的数据库下载安装使用教程-第一篇
- element 绘制饼状图(复制代码直接用),付效果图
- 「鹿班智能设计平台」是如何工作的
- Python读取,写入,保存txt文件
- 使用Teleport Ultra批量克隆网站,使用Easy CHM合并生成chm文件
- 丰富的层次感,打造190㎡现代简约居住空间
- numpy的文件存储.npy .npz 文件详解
- 国内顶级经济类期刊有哪些?
热门文章
- flink入门实战总结
- Netflix网关zuul(1.x和2.x)全解析
- Adapter pattern
- 从websphere6.1迁移到weblogic10.3的问题总结--转
- 解决两台centos虚拟机Telnet服务无法联机的问题
- SQL Server 2005 Sa 用户的启用
- 【人脸检测】学界 | 中科院自动化研究所提出 FaceBoxes:实时、高准确率的 CPU 面部检测器
- 没用过这些 IDEA 插件?怪不得写代码头疼
- Docker Review - dockerfile 实战_给基础镜像增加功能
- Java-COW在Java中的应用