Swift4 模式, 枚举型
创建: 2018/03/05
完成: 2018/03/05
更新: 2018/03/10 改变标题 [Swift4 模式] -> [Swift4 模式, 枚举型]
补充RawRepresentable协议
【任务表】TODO
| 元组(taple)与switch | |
|
模式匹配(pattern matching): 检验构造和值是否一致的处理 |
|
| case来使用元组 |
switch的待检验量可以是元组, 所有case列举的实例的型必须一致 switch location { // location: [Int, Int]
|
|
switch里用where |
● 可以对case的元组附加条件 在:前面写 switch sample { // sample: Int
● 可用逗号同时罗列多个条件 如果case里有var/let, 要保证声明的量的值一定会被决定 绝对可行的方法: 声明的量所有匹配量都带 switch sample { // sample: (Int, Int)
|
| switch里用可选型 |
switch sample { // sample: (Int?, Int?) = (a, b)
● 带问号表示可能是nil, 非nil时进行下一步 1? 非nil且为1 nil 为nil _? 非nil, 忽略值 |
| 枚举型 | |
|
基本枚举型 |
共有型枚举型的一种 enum 枚举型名 {
例: enum Sample1 {
● 元素可以比较是否相等 ==, != |
| 方法定义 |
和其他方法定义一样 enum Sample2: CustomStringConvertible {
|
| 值型枚举型 |
enum 型名: 实体型 {
● 所有成员都带同类型的值, 值必须各不相同 ● 所带型叫实体型(raw type), 值为实体值(raw value) ● 实体型可为 各种Int, Float/Double, Bool, 字符串, 这些的组合 ● 默认值: 实体型为整数时, 默认第一个第一个为0, 不指定值的为前一个的值+1 字符串时, 不指定则为元素名的字符串, String("元素名") 其他型时必须制定值 ● 获取实体值: rawValue enum Sample3: Int {
|
|
枚举型的构造函数 静态变量, 静态方法 |
● 只可定义计算型属性 var sample: Type { get {...} set {...} } ● 自带构造函数init?(rawValue:) Sample.init(rawValue: ) ● 自定义构造函数 self = 实例 init() {
● 静态变量, 静态方法: 开头加 static 静态变量用作默认值,静态方法用来设定默认值等 |
| 共用型的枚举型 | |
| 共用型枚举型 |
enum 型名 {
例 enum Sample4 {
生成实例 let myEnumTest4 = Sample4.a("", "")
● 元素不能互相比较 要比较则自己去采用Equalable ● 用在switch里时, 可用下两种方法获取值, 两种方法作用相同 case let Sample4.a(str1, str2) case Sample4.a(let str1, let str2) ● 元组可带标签, switch的case里面可以省略标签 let/var 和标签连用时, 写法注意 case let .(first: a, second: b) case .(first let a, second let b) |
| if-case |
● 不带元组的枚举型(简单枚举型), 值型枚举型可以比较 ● 共用型枚举型的比较只能用switch, 除非自己采用Equalable 比较方法 if case模式 = 式, ... { // ,... 相当于where部分
例 if case .a = p {
● , ...可以写模式匹配, 条件句, 可选绑定等 |
| for-in中使用case |
case也可以用在for-in for case let (a?, ?) in array { // array: [(Int?, Int?)]
● 和普通for-in一样迭代, 只有满足case才会执行代码块 |
| 采用协议 |
可以采用协议 ● 值型枚举型 自动采用RawRepresentable, 带有rawValue, init?(rawValue:) protocol RawRepresentable {
enum 型: 实体型, 协议1, 协议2, ... {
● 共用型枚举型 enum 型: 协议1, 协议2, ... {
|
| 改写自身元组内容的方法(method) |
mutating func sample(x: Int) -> Bool {
|
| 递归的构造体 |
● 在需要递归的case前加上indirect enum Sample5 {
● 比较多时可以在enum前加上indirect indirect enum Sample5 {
|
| 可选型与枚举型 |
可选型由共用型枚举型定义 public enum Optional<Wrapped> : ExpressibleByNilLiteral {
以下两用法相同 var sample: Int? =
if case let x? = sample { ... } // 不同于if-let: if let x = sample { ... }
|
| 模式匹配(pattern matching) | |
| 模式匹配的规则 |
略 # TODO: Supply [模式匹配的规则 p186] |
| 模式匹配运算符 |
模式 ~= 受体 ● 不需要case |
Swift4 模式, 枚举型的更多相关文章
- 枚举型Enum和结构型Stuct
枚举型实质就是使用符号来表示的一组相互关联的数据. Season currentSeason,nextSeason; currentSeason = Season.Spring; nextSeason ...
- 备忘录模式 Memento 快照模式 标记Token模式 行为型 设计模式(二十二)
备忘录模式 Memento 沿着脚印,走过你来时的路,回到原点. 苦海翻起爱恨 在世间难逃避命运 相亲竟不可接近 或我应该相信是缘份 一首<一生所爱>触动了多少 ...
- FactoryMethod工厂方法模式(创建型模式)
1.工厂方法模式解决的问题 现在有一个抽象的游戏设施建造系统,负责构建一个现代风格和古典风格的房屋和道路. 前提:抽象变化较慢,实现变化较快(不稳定) 整个抽象的游戏设施建造系统相对变化较慢,本例中只 ...
- Prototype原型模式(创建型模式)
1.原型模式解决的问题 现在有一个抽象的游戏设施建造系统,负责构建一个现代风格和古典风格的房屋和道路. 前提:抽象变化较慢,实现变化较快(不稳定) 整个抽象的游戏设施建造系统相对变化较慢,本例中只有一 ...
- java中枚举型的定义以及使用
1.如何定义枚举型 public enum gender{ GEN1("男","1"), GEN2("女","0"); ...
- 枚举型变量 ErrorStatus HSEStartUpStatus及使用
ErrorStatus和C语言中的int .char一样,后面定义的HSEStartUpStatus是这个变量.举例,你的ErrorStatus 代表bool类型的0或者1. typedef enum ...
- MySQL进阶12-- 数据类型介绍: 数值型/字符型/日期型-- 正负溢出保护/枚举型/set型/时间戳
/*进阶12 SQL 数据类型介绍 数值型: 整数: Tinyint(1b) < mediumint(3b)<smallint(2b) <int(4b) <bigint(8b) ...
- 工厂方法模式——创建型模式02
1. 简单工厂模式 在介绍工厂方法模式之前,先介绍一下简单工厂模式.虽然简单工厂模式不属于GoF 23种设计模式,但通常将它作为学习其他工厂模式的入门,并且在实际开发中使用的也较为频繁. (1 ...
- Java 正则表达式匹配模式[贪婪型、勉强型、占有型]
Greediness(贪婪型):最大匹配 X?.X*.X+.X{n,} 是最大匹配.例如你要用 “<.+>” 去匹配 “a<tr>aava </tr>abb”,也许 ...
随机推荐
- HTML介绍&常用的标签
HTML介绍 1. web服务器本质 import socket s = socket.socket() s.bind(('127.0.0.1', 8080)) s.listen(5) while T ...
- iOS 混合变换旋转 CGAffineTransform
在ios 中, Core Graphics 提供了一系列的函数可以在一个变换的基础上做深层次的变换,如果做一个既要缩放又要旋转的变换,以下的方法比较实用. CGAffineTransformScale ...
- Xcode warning: code will never be executed.
在xcode编译的时候,提示了code will never be executed这个警告.百度了一下,大体的意思是,该代码永远不会执行的意思. 比如: - (void)setMyStyle:(Ad ...
- Flatten Binary Tree to Linked List (DFS)
Given a binary tree, flatten it to a linked list in-place. For example,Given 1 / \ 2 5 / \ \ 3 4 6 T ...
- Java的发送邮件
以下内容引用自http://wiki.jikexueyuan.com/project/java/sending-email.html: 用Java应用程序来发送一封电子邮件是足够简单的,但是开始时应该 ...
- mysql查询今天,昨天,近7天,近30天,本月,上一月数据的SQL
原文:http://www.open-open.com/code/view/1423207309170 select * from ad_proTrack_t where to_days(crt_ti ...
- HNU 12834 Thread Tree
递归输出即可了 #include<bits/stdc++.h> using namespace std; struct tree{ int dot; string s; } ...
- CentOS5 忘记root密码的解决办法
方法/步骤 1 开机启动的时候,按“E”进入如下界面. 2 选择相应的内核,再次按“E”,出现下图,选择第二项,再次按“E”键 3 在尾部加:“空格+single”(如图),Enter.图如下: ...
- Xpath—解决这个问题的良药
何为良药? 因为在XML中存在一些问题和缺陷,针对这些问题就产生了响应的解决方式.如: getElementById方法在解析XML时因为一些原因适不适合的: 首先XML中每一个元素节点不一定有id属 ...
- 【求建议】毕业之声——信院IT类毕业学子经验分享交流会
一:缘由 在和非常多学子交流,及上课的经历中,发现一个非常普遍的现象:部分大一学生即失去了对学习.对专业的兴趣.有人在迷茫之后奋起直追.从而珍惜利用不多的大学时光努力提高自己.有人在迷茫中沉沦,沉迷于 ...