流程控制(Control Flow)
For循环
for循环和C语言,OC用法很相像,通常有for()和 for in两种。
遍历时可以利用下划线"_"忽略对值的访问等。
Switch
switch在Swift中则显得灵活的多,不过需要注意的是,不同于C语言,Swift中的Switch不存在隐式的贯穿,每个case里的表达式后面不需要写break则会自动跳出。
如果你想保留这次匹配并向下匹配的话,请使用fallthrough关键字。
每个case里必须要有表达式,每个switch也必须要有default来匹配可能没有预料到出现的情况。
swift中的匹配十分灵活,可以是区间,元组或者是枚举的case等等。
switch也支持值绑定(Value Binding)
在前两个case中,我们声明了x,y两个常量,如果匹配的话,则可以得到前面声明的point常量中的x或者y的值,然后再进行一些操作。
注意到这里没有写default语句,是因为最后一个case相当于default,它包含了所有的情况,而xcode的编译器能够识别,所以并没有报error。
switch在匹配的时候也可以带附加条件进行判断,用到了where关键字。用法类似于SQL语句。
控制转移
控制转移主要用于一些需要跳出这次循环或者立即终止当前访问域的代码的情景。
用到了continue,break,fallthrough,return关键字。
continue
用于停止本次循环迭代
这里每当匹配到l,o或者空格时,立即进行下次for循环。
break则同其他语言用法一样,跳出for,switch,while等流程控制语句。
fallthrough属于贯穿,在case中执行完statement继续向下匹配执行。
带标签的语句
可以给一些流程控制语句前加上标签,来进行标识。
标识语句的标准写法和用法:
这里的break不再跳出本次switch,而是跳出了整个while循环,这里PrimeLoop这个标签起到了作用。
函数
在swift中,函数目前不再我们像OC一样去用+-来声明方法,而是使用func。
在swift中,我们调用函数的时候可以像其他语言一样,忽略起返回值。
这里在第二个函数体中,我们并没有用到第一个函数中的Int型的返回值。
Swift的元组也可以作为函数的返回值。
这里我们获取了一个字符串的长度以及其中表示数字的字符个数。并用一个元组获取其各自的值。
func在定义参数的时候可以为方便使用函数的人更清楚参数的含义,可以在前面加"#"来表明外部参数名。
这里在使用函数的时候我们就能看到参数前面的参数名提示了。
有的时候我们在定义参数的时候想给其赋一下默认值。当我们赋值的时候,swift默认为其添加了外部参数名。
可变参数
Swift中的函数也有可变参数,注意的是一个函数参数最多只有一个可变参数,而且必须是参数表的最后一个。
常量参数和变量参数
Swift中的参数默认为常量,并且不能对外部值进行修改。参数只是对该值的一个值拷贝,生命周期也为函数内部。
我们可以用var来声明参数表明他们在函数内部可变。
如果想要保留其修改,则使用inout关键字。传值进来时需要在C语言中的取址符"&"来实现。
函数类型
在Swift中,几乎所有东西都作为一个类型,一个对象呈现。
所以,函数也是一种类型。
以此类推,函数也可以作为参数,作为返回值类型甚至嵌套实现等。
灵活的语法可以让我们在设计上拥有更多的选择。
上面addAnother函数使用了(Int, Int) -> Int 函数类型作为参数。
而后面则是返回一个函数的两种不同实现,后面的实现使用了嵌套函数。
好像忘了说,函数使用->来表明返回值。
以上为本篇博客全部内容,欢迎勘误和讨论。
Swift的流程控制和函数