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

Easter79
• 阅读 873

从日记中整理出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
点赞
收藏
评论区
推荐文章
Souleigh ✨ Souleigh ✨
3年前
JS - 关于一些代码规范
代码规范源文件强制JavaScript源文件必须以无BOM的UTF8编码。缩进强制必须采用4个空格缩进,不允许以Tab制表符或2个空格代替。强制switch中的case和default必须保持缩进。//正例switch(variable)case'1'://do...break
Karen110 Karen110
3年前
一篇文章带你了解JavaScript switch
Switch是与if...else...相同的条件语句,不同之处在于switch语句允许根据值列表测试变量是否相等。switch语句用于根据不同的条件执行不同的操作。一、Switch语句使用switch语句选择要执行的多个代码块中的一个。1\.语法switch(expression)casen:codeblock
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
3年前
Swift调用sha1算法
在Swift中通过调用OC的CommonCrypto库可以很方便的实现String字符串转换为sha1。在一个swift项目中,需要使用桥接头文件(Bridgingheader)的方式来引入一个OC库,才能调用OC中的内容。本文也将作为Swift项目中如何调用ObjectiveC代码的一个介绍。标准实现步骤1、新建一个Obje
Easter79 Easter79
3年前
Swift讲解专题六——流程控制
Swift讲解专题六——流程控制一、引言      一种编程语言的强大与否,很大程度上取决于其提供的程序流程控制方案,就如使用汇编语言实现复杂的程序流程是一件痛苦的事情。Swift中提供了许多强大的流程控制语句,例如快速遍历forin,while循环,repeatwhile循环,switch选择等,需
Wesley13 Wesley13
3年前
C语言二次系统学习3(分支循环、函数)
本次学习,主要针对语句和函数两部分进行学习。分支语句(if,switch)与循环语句(while,for,dowhile)switch语句中,在每个选择之后如果不进行break跳出,会执行下一个case,而且应注意default语句的使用,一般会放在{}代码块的后方dowhile语句中,会首先执行一次循环,再进行判定,所以使用相对较少。whi
小万哥 小万哥
11个月前
C 语言中的 switch 语句和 while 循环详解
C语言中的switch语句替代多重if..else语句,可以使用switch语句。switch语句用于选择多个代码块中的一个来执行cswitch(表达式)casex://代码块break;casey://代码块break;default://代码块工作原理
小万哥 小万哥
10个月前
C# 循环与条件语句详解
CSwitch语句使用switch语句选择要执行的多个代码块中的一个。示例:csharpswitch(expression)casex://代码块break;casey://代码块break;default://代码块break;它的工作方式如下:1.评估
小万哥 小万哥
9个月前
Java break、continue 详解与数组深入解析:单维数组和多维数组详细教程
JavaBreak和ContinueJavaBreak:break语句用于跳出循环或switch语句。在循环中使用break语句可以立即终止循环,并继续执行循环后面的代码。在switch语句中使用break语句可以跳出当前case,并继续执行下一个case
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k