在Swift中进行循环控制
for-in循环
- 使用for-in循环来遍历序列,比如一个范围的数字,数组中的元素或者字符串中的字符
for-in遍历字典
- 当字典遍历时,每一个元素都返回一个(key,value)元组,你可以在for-in循环体重使用显式命名常量来分解(key,value)元组成员
- 如果你不需要序列的每一个值,你可以使用下划线来取代遍历名以忽略值
for-in分段区间
- 使用stride(form:to:by:)函数来跳过不想要的标记(开区间)
- 闭区间也同样适用,适用stride(form:through:by:)即可
whilt循环
- repeat-while循环(Objective-C do-while)
更强大的switch
switch
- switch语句会将一个值与多个可能的模式匹配。然后基于第一个成功匹配的模式来执行合适的代码块
- switch语句一定得是全面的。就是说,给定类型里每一个值都得被考虑到并且匹配到一个switch的case。如果无法提供一个switch case所有可能的值,你可以定义一个默认匹配所有的case来匹配所有未明确出来的值。这个匹配所有的情况用关键字default标记,并且必须在所有case的最后出现
- Objective-C switch语句如果不全面,仍然可以运行
没有隐式贯穿
- 相比C和Objective-C里面的switch语句来说,Swift里的switch语句不会默认从匹配case的末尾贯穿到下一个case里
- 相反,整个switch语句会在匹配到第一个switch的case执行完毕之后退出,不在需要显式的break语句
- 每一个case的函数体必须包含至少一个可执行的语句
- 在一个switch的case中匹配多个值可以用逗号分隔,并且可以写成多行
- switch的case值可以在一个区间中匹配
元组匹配
- 你可以使用元组来在一个switch语句中测试多个值
- 使用下划线(_)来表明匹配所有可能的值
值绑定
- switch的case可以将匹配到的值临时绑定位一个常量或者变量,来给case的函数使用
- 如果使用var关键字,临时的变量就会以合适的值来创建并初始化。对这个变量的任何改变都只会在case的函数体内有效
where字句
- switch case 可以使用where分句来检查是否符号特定的约束
复合匹配
- 多种情形共享同一个函数体的多个情况可以在case后写出多个模式来复合,在每个模式之间用逗号分隔。如果任何一个模式匹配了,那么这个情况都会被认为是匹配的。如果模式太长,可以把它们写成多行
复合匹配同样可以包含值绑定。所有复合匹配的模式都必须包含相同的值绑定集合,并且复合情况中的每一个绑定都得有相同的类型格式。这才能确保无论复合匹配的那部分命中了,接下来的函数体中的代码都能访问到绑定的值并且值得类型也都相同