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

从日记中整理出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来检查是否符合特定要求、复合匹配(多情形共享一个函数)、复合匹配中值绑定。

1//区间匹配 2let count = 11 3switch count { 4case 0: 5 print(0) 6case 1..<5: 7 print(1) 8case 6..<12: 9 print(2) 10default: 11 break 12} 13输出:2 14 15//元组匹配和任意指定匹配 16let point = (1, 1) 17switch point { 18case (0,0): //指定匹配 19 print("指定匹配") 20case (_,1): //单个匹配 21 print("x随意") 22case (1,_): //单个匹配 23 print("y随意") 24case (-2...2,-2...2): //区间匹配 25 print("区间匹配") 26 27default: 28 print("--") 29} 30输出:x随意。相比于oc在swift中的匹配到后直接跳出匹配 31 32//值绑定匹配 33let point = (1, 1) 34switch point { 35case (0,0): //指定匹配 36 print("指定匹配") 37case (let x,1): //值绑定匹配 38 print("值绑定x \(x)") 39case (1, let y): //值绑定匹配 40 print("值绑定y \(y)") 41case (-2...2,-2...2): //区间匹配 42 print("区间匹配") 43default: 44 print("--") 45} 46输出:值绑定x 1 47 48//条件匹配 49let point = (1, 1) 50switch point { 51case (0,0): //指定匹配 52 print("指定匹配") 53case let (x, y) where x==y: 54 print("条件匹配") 55case (let x,1): //值绑定匹配 56 print("值绑定x \(x)") 57case (1, let y): //值绑定匹配 58 print("值绑定y \(y)") 59default: 60 print("--") 61} 62输出:条件匹配 63 64//复合匹配加值绑定 65let point = (1, 0) 66switch point { 67case (0,0): //指定匹配 68 print("指定匹配") 69case let (x, y) where x==y: 70 print("条件匹配") 71case (let num,0) , (0, let num): //值绑定匹配 72 print("复合匹配值绑定 \(num)") 73case (1, let y): //值绑定匹配 74 print("值绑定y \(y)") 75default: 76 print("--") 77} 78输出:复合匹配值绑定 1

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

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

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

1//使用元组接受字典遍历 2let dic = ["key1":"v1", "key2":"v2", "key3":"v3"] 3for (key, v) in dic { 4 print("\(key) \(v) 字典") 5} 6 7输出 8key3 v3 字典 9key2 v2 字典 10key1 v1 字典 11 12//段遍历 半开半闭区间 13for i in stride(from: 0, to: 25, by: 5) { 14 print("\(i) 段遍历") 15} 16输出:0 段遍历 175 段遍历 1810 段遍历 1915 段遍历 2020 段遍历 21 22//段遍历 闭区间 23for i in stride(from: 0, through: 25, by: 5) { 24 print("\(i) 段遍历") 25} 26输出:0 段遍历 275 段遍历 2810 段遍历 2915 段遍历 3020 段遍历 3125 段遍历 32 33//使用-代替,求三的五次方 34let num = 3 35let power = 5 36var result = 1 37 38for _ in 1...power { 39 result *= num 40} 41print(result) 42输出 243
点赞
收藏

评论区

加载中...

相关推荐

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

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

一篇文章带你了解JavaScript switch

Switch是与if...else...相同的条件语句,不同之处在于switch语句允许根据值列表测试变量是否相等。switch语句用于根据不同的条件执行不同的操作。一、Switch语句使用switch语句选择要执行的多个代码块中的一个。1\.语法switch(expression)casen:codeblock

Swift调用sha1算法

在Swift中通过调用OC的CommonCrypto库可以很方便的实现String字符串转换为sha1。在一个swift项目中,需要使用桥接头文件(Bridgingheader)的方式来引入一个OC库,才能调用OC中的内容。本文也将作为Swift项目中如何调用ObjectiveC代码的一个介绍。标准实现步骤1、新建一个Obje

Swift讲解专题六——流程控制

Swift讲解专题六——流程控制一、引言      一种编程语言的强大与否,很大程度上取决于其提供的程序流程控制方案,就如使用汇编语言实现复杂的程序流程是一件痛苦的事情。Swift中提供了许多强大的流程控制语句,例如快速遍历forin,while循环,repeatwhile循环,switch选择等,需