swift中更强大的switch和眼花缭乱的for in

Easter79
• 阅读 506

从日记中整理出switch和for in。swift的switch比起oc真的是厉害坏了而且for in中的功能也比oc的更加灵活。小作笔记

1.1 swift中swich语句会将一个值与多个可能的模式匹配。然后基于第一个成功匹配的模式来执行合适的代码块,如果想要oc中匹配到case后依旧贯穿接下来的case则要增加fallthough。switch语句一定得是全面的,就是说,给定类型里每一个值都得被考虑到并且匹配到一个switch的case。如果无法提供一个switchcase所有可能的值,你可以定义一个默认匹配所有的case来匹配所有未明确出来的值。这个匹配所有的情况用关键字default标记,并且必须在所有case的最后出现。

1.2 一个case可以区间匹配、元组匹配(_可以匹配所有可能值)、匹配过程中的值绑定、case中增加where来检查是否符合特定要求、复合匹配(多情形共享一个函数)、复合匹配中值绑定。

//区间匹配
let count = 11
switch count {
case 0:
    print(0)
case 1..<5:
    print(1)
case 6..<12:
    print(2)
default:
    break
}
输出:2

//元组匹配和任意指定匹配
let point = (1, 1)
switch point {
case (0,0): //指定匹配
    print("指定匹配")
case (_,1): //单个匹配
    print("x随意")
case (1,_): //单个匹配
    print("y随意")
case (-2...2,-2...2): //区间匹配
    print("区间匹配")

default:
    print("--")
}
输出:x随意。相比于oc在swift中的匹配到后直接跳出匹配

//值绑定匹配
let point = (1, 1)
switch point {
case (0,0): //指定匹配
    print("指定匹配")
case (let x,1): //值绑定匹配
    print("值绑定x \(x)")
case (1, let y): //值绑定匹配
    print("值绑定y \(y)")
case (-2...2,-2...2): //区间匹配
    print("区间匹配")
default:
    print("--")
}
输出:值绑定x 1

//条件匹配
let point = (1, 1)
switch point {
case (0,0): //指定匹配
    print("指定匹配")
case let (x, y) where x==y:
    print("条件匹配")
case (let x,1): //值绑定匹配
    print("值绑定x \(x)")
case (1, let y): //值绑定匹配
    print("值绑定y \(y)")
default:
    print("--")
}
输出:条件匹配

//复合匹配加值绑定
let point = (1, 0)
switch point {
case (0,0): //指定匹配
    print("指定匹配")
case let (x, y) where x==y:
    print("条件匹配")
case (let num,0) , (0, let num): //值绑定匹配
    print("复合匹配值绑定 \(num)")
case (1, let y): //值绑定匹配
    print("值绑定y \(y)")
default:
    print("--")
}
输出:复合匹配值绑定 1

1.3 as和is搭配swith的强大。as在匹配成功后会自动将类型返回给dog,就为Dog类型。is会进行判断但是不会返回。

swift中更强大的switch和眼花缭乱的for in

1.4 使用重载模类型符对表达模式(类)进行匹配

swift中更强大的switch和眼花缭乱的for in

2.1 swift中for in也给我留下了深刻的印象。遍历字典并拆分字典、段遍历、字符、用下划线来取代忽略的值。

//使用元组接受字典遍历
let dic = ["key1":"v1", "key2":"v2", "key3":"v3"]
for (key, v) in dic {
    print("\(key) \(v) 字典")
}

输出
key3 v3 字典
key2 v2 字典
key1 v1 字典

//段遍历 半开半闭区间
for i in stride(from: 0, to: 25, by: 5) {
    print("\(i) 段遍历")
}
输出:0 段遍历
5 段遍历
10 段遍历
15 段遍历
20 段遍历

//段遍历 闭区间
for i in stride(from: 0, through: 25, by: 5) {
    print("\(i) 段遍历")
}
输出:0 段遍历
5 段遍历
10 段遍历
15 段遍历
20 段遍历
25 段遍历

//使用-代替,求三的五次方
let num = 3
let power = 5
var result = 1

for _ in 1...power {
    result *= num
}
print(result)
输出 243
点赞
收藏
评论区
推荐文章
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Souleigh ✨ Souleigh ✨
1年前
JS - 关于一些代码规范
代码规范源文件强制JavaScript源文件必须以无BOM的UTF8编码。缩进强制必须采用4个空格缩进,不允许以Tab制表符或2个空格代替。强制switch中的case和default必须保持缩进。//正例switch(variable)case'1'://do...break
Karen110 Karen110
1年前
一篇文章带你了解JavaScript switch
Switch是与if...else...相同的条件语句,不同之处在于switch语句允许根据值列表测试变量是否相等。switch语句用于根据不同的条件执行不同的操作。一、Switch语句使用switch语句选择要执行的多个代码块中的一个。1\.语法switch(expression)casen:codeblock
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Souleigh ✨ Souleigh ✨
2年前
前端性能优化 - 雅虎军规
无论是在工作中,还是在面试中,web前端性能的优化都是很重要的,那么我们进行优化需要从哪些方面入手呢?可以遵循雅虎的前端优化35条军规,这样对于优化有一个比较清晰的方向.35条军规1.尽量减少HTTP请求个数——须权衡2.使用CDN(内容分发网络)3.为文件头指定Expires或CacheControl,使内容具有缓存性。4.避免空的
helloworld_34035044 helloworld_34035044
11个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
1年前
Swift调用sha1算法
在Swift中通过调用OC的CommonCrypto库可以很方便的实现String字符串转换为sha1。在一个swift项目中,需要使用桥接头文件(Bridgingheader)的方式来引入一个OC库,才能调用OC中的内容。本文也将作为Swift项目中如何调用ObjectiveC代码的一个介绍。标准实现步骤1、新建一个Obje
Easter79 Easter79
1年前
Swift讲解专题六——流程控制
Swift讲解专题六——流程控制一、引言      一种编程语言的强大与否,很大程度上取决于其提供的程序流程控制方案,就如使用汇编语言实现复杂的程序流程是一件痛苦的事情。Swift中提供了许多强大的流程控制语句,例如快速遍历forin,while循环,repeatwhile循环,switch选择等,需
Stella981 Stella981
1年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
1年前
C语言二次系统学习3(分支循环、函数)
本次学习,主要针对语句和函数两部分进行学习。分支语句(if,switch)与循环语句(while,for,dowhile)switch语句中,在每个选择之后如果不进行break跳出,会执行下一个case,而且应注意default语句的使用,一般会放在{}代码块的后方dowhile语句中,会首先执行一次循环,再进行判定,所以使用相对较少。whi
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
2.8k
文章
5
粉丝
1.2k
获赞