在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在上一篇博客里面,我谈到了swift里面的一些基本类型以及相关的操作,相信你看了之后一定会觉得其实swift也不难嘛。好吧,这篇博客里面要谈的一些高级操作,可能会让你有点头疼了。 好了,废话不多说了,让我们回到正题上面来吧!首先是控制流的操作,如果你熟悉其他语言的花,相信你一定会想到if/else,while,do/while,甚至是switch。没错,其实在swift里面也是这些东东,让我们来看看swift里面能不能变出什么新的花样呢?让我们先来看一看for语句吧!在swift里面for语句有两种形式,第一种是我们在上一篇博客里面用到的for/in操作,让我们来回顾一下: var testStrArray=["xiao","cai"]; var item:String; for item in testStrArray{ println(item); //遍历数组 }
var testStrDictionary=["key1":"value1","key2":"value2"]; for (key,value) int testStrDictionary{ println(item+value); //遍历字典,其实还可以单独遍历keys,values,请参考上一篇博客 } 当然针对Int类型的数组还有一种快捷的方式: var index:Int; for index in 1...10{ println(index); } 哈哈哈,没错就是使用闭包或者使用半闭包运算符(这里的闭包,跟我们将要在后面提到的闭包是不一样的),当然,如果你在for循环里面不关心item,你可以说使用如下形式: for _ in 1...10{ println("hello world"); //使用_占位符,表示只是简单的循环10次,每次输出一个“hello world” } 让我们再来看一看for循环的第二种形式,这种形式跟我们在其他语言里面看到的就非常相似了: for var index-0;index<3;index++{ println(index); 只是在swift里面我们不需要将for里面的条件语句用括号包括起来 } 好了,让我们来说一说while和do/while语句吧!这两中语句,跟其他语言里面没有多大的区别: while 3<4{ println("hello world"); } do{ println("hello world"); }while 3<4 相信这两条语言对你来说应该驾轻就熟的吧!希望下面要说的if/elseif/else,switch对你来说也是这样的。 var flag:Int=10; if flag<=0{ println("Low zero"); } else if flag>=10{ println("Big Ten"); } else{ println("Other Value"); } 但是这里想要说明一点的是,每个if/else if/else后面一定要加上{},这就跟c#里面不太一样了,比如在c#里面有的时候,我们为了代码的整洁,我可能会写如下代码: int flag=10; if(flag<=0) Console.Writeln("Low Zero"); else if(flag>=10) Console.Writeln("Big Ten"); else Console.Writeln("Ohter Vlaue"); //我们可以去掉{} 接下来是switch语言,理论上switch和if/else if/else语言是可以相互替换的。让我们来看一看在swift里面switch语言的书写方式吧: var condition:String="hello"; //我一般习惯加上类型,不用swift的自推断功能 switch condition{ case "xiao": println("xiao"); case "cai": print("cai"); case "hello": print("hello"); default: print("No Found"); } 当你看到这段代码的时候,你也许就会说:“哈哈,小样写错了吧!怎么没有case后面没有break呢?如果没有break的话,岂不是每个case都需要对比一下吗?”,是的,在其他语言里面我们一定要加上break,但是在swift里面,它本身就具有不可贯穿性,即使你没有加上break,只要匹配到一条case之后它就不会再往下面执行了,是不是很智能呢?当然你也可以自己加上break,这样的话就跟其他语言贯通了。比如,你可以写成: var condition:String="hello"; switch condition{ case "xiao": println("xiao"); break; case "cai": println("cai"); break; case "hello": println("hello"); break; case "xiao": println("xiao"); break; case "cai": break; default: println("Not Found"); break; } 看到这段代码,你可能又会说了:“哈哈哈,小样,你是不是又写错了,怎么有两个相同的case呢?”,是的,在这段代码确实有错误,但是错误并不是有两个相同的错误,而是有一个case和break之间没有其他的执行语句。前面我们已经说过了,swift里面的switch具有不可贯穿性,但是它只要匹配到第一条符合条件的case就不会往下执行了,但是我们必须要保证每个case下面必须要有一条可执行的语言(break,conutine不算)。看到这里面你可能还会有一个疑问了,在c#里面我可以同时匹配多个case,在swift里面有没有可能做到呢?肯定是有的,但是写法不一样: var condition:String="hello"; switch condition{ case "xiao","cai","hello": //将多个条件写在同一个case后面,在c#里面你就需要写多个case,只不过他们公用同一个break而已 println("xiaocai hello"); default: println("Not Found"); } 在swift里面指针switch还有几种不同的变体: var conditionInt:Int=10; switch 10{ case 1...5: println("work"); case 6...7: println("休息"); default: println("加班"); } 是的,没错又是指针闭包运算符玩出来的新花样。让我们再来看一看当switch遇上元组又回产生怎样的奇妙反应呢? let origionPoint=(0,0); switch origionPoint { case (1,1): print("One Point"); break; case (2,2): print("Two Point"); break; case (_,3); println("Y Is 3"); break; } 没错在上面的代码里面,我们尝试加上了break,同时省略了default,还有我们在一个case条件里面运用了占位符,它的意思是:我只想匹配y轴上面是3的点,对于x轴我不关心是什么。 下面让我们再来加上一条case (let x,let y):,如果我加上这条case会不会产生错误呢?这是完全可行的,不知道你是否记得我们之前提到过的值绑定,在这条case里面的意思就是:我想要将匹配到的值:横坐标上面的值赋值给x,纵坐标上面的值赋值给y。那么你又会问了,这条case什么时候能够匹配到呢?答案是什么时候都会匹配到,所以你使用的时候,应该将其放置在最后一条,以免不会匹配其他的case。指针这条case还有一种简写形式:case let(x,y): 读到这里你是不是会觉得swift语言真是灵活多变呢?别急,更多变的还在后面呢?让我们来看一看下面这段代码吧: let origionPoint=(0,0); switch origionPoint{ case let(x,y) where x==y: println("x equal y"); case let(x.y) where x==-y: println("x equal -y"); case let(x,y): println("get x and y"); } 看到这段代码,你是不是想说:“哈哈哈,小样你是不是搞错了,我还没有见过其他语言里面case后面还可以加where的”,但是我想说的是:没错,在swift里面你要习惯这种突入袭来的惊喜。 下面让我们来接触控制传递语句:break,continue,return,fallthrough,对于break,continue,return我不想多说了,跟其他语言里面的作用是一样的。break结束整个循环,continue结束当前本次循环,return即使返回。但是fallthrough是swift里面所特有的,前面不是说过switch语句在swift里面具有不可贯穿性吗?那么来看下面这段代码: var condition:String="hello"; switch condition { case "hello": println("xiao"); fallthrough; case "xiao","cai": println("xiaocai"); } 没错fallthrough读作”贯穿“,就是当我匹配到一条case之后,我不希望程序结束switch语句,我希望它继续匹配下一条case,明白了吧!这就是为什么在swift里面允许相同的case缘故了。再来看一段代码: Tip:while 3<4{ switch "hello"{ case "xiao","cai": continue Tip; } } 这段代码就跟其他语言里面的goto语句差不多,不解释了。 好了,这篇博客就到这里了,有时间还会继续更新的(保留版权/著作权)。 |
请发表评论