博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift 控制流
阅读量:6876 次
发布时间:2019-06-26

本文共 3412 字,大约阅读时间需要 11 分钟。

前言

  • 指令的执行顺序在程序结构中,我们称之为控制流。控制流,也称为控制结构,通常包括:顺序结构、条件结构、循环结构、转向结构。

1、条件分支结构

1.1 if 语句

  • 1)if 语句

    • Swift 中的 if-else 和结构和 C 语言以及 OC 中的结构相似,只不过判断语句不需要写在小括号中。

      if condition {    statements 1} else {    statements 2}
  • 2)if-let 语句,值绑定

    • if-let 语句是 Swift 提供的一种更安全的可选型解包方式 “可选绑定” 语句。

      if let 常量 = 可选型变量 {    statements 1}statements 2
      if var 常量 = 可选型变量 {    statements 1}statements 2
    • 如果 “可选型变量” 有值,即不为 nil 时,对 “可选型变量” 解包并给其一个 “别名”(语句中的常量/变量),在 if 后的大括号对中 “别名” 才有效果。

    • 如果 “可选型变量” 无值,即为 nil 时,那么大括号对中的代码不会执行,使可选解包程序不会崩溃。

1.2 guard 语句

  • 1)guard-else 语句

    • 在 Swift 2.0 中引入了用来进行判断的关键字 guard,与 if 类似,不过与 if-else 不同的是,guard-else 结构先处理不符合 guard 中判断条件的情况,最后处理条件为真时的操作。

      guard condition else {    statements 1    return}statements 2
    • guard 的引入是因为当需要判断多个条件的时候,if-else 结构只能通过嵌套的方式排列所有的判断条件,而使用 guard 后可以使嵌套结构变成顺序执行的结构。

    • 当判断条件为假时必须在大括号中使用 return 或者 break 提前终止代码。

  • 2)guard-let-else 语句,值绑定

    • guard-let-else 语句是 Swift 提供的一种更安全的可选型解包方式 “可选绑定” 语句。

      guard let 常量 = 可选型变量 else {    statements 1    return}statements 2
      guard var 变量 = 可选型变量 else {    statements 1    return}statements 2
    • guard-let-else 首先处理 “可选型变量” 为 nil 时的情况,在此种情况下必须在大括号中使用 return 或者 break 提前终止代码。

    • 如果 “可选型变量” 有值,那么 “可选型变量” 的值也会被保存在 “别名”(语句中的常量/变量)中,不管有多少个 guard-let-else,“别名” 的作用域都在最外层。

1.3 switch 语句

  • 1)switch 语句

    • switch 语句会把需要检验的值与若干中情况进行匹配,一旦匹配就会执行这种情况下的代码。

      switch value {    case value1:        statements 1    case value2:        statements 2    default:        statements 3}
    • 和 OC 中的 switch 语句不同,在 switch 语言中你不需要在 case 块中显式的使用 break 语句跳出 switch,当匹配到的 case 块中的代码块中的代码执行完毕后,程序会终止 switch 语句,而不会继续执行下一个 case 块。

    • 可以使用 fallthroughswitch 语句中使代码继续执行到下一个 case 中的代码,而不会检查它下一个将会落入执行的 case 中的条件是否匹配,从而达到和 C 语言标准中 switch 语句特性一样的效果。fallthrough 不能用在下一个 case 中有变量的情况,如 case 中出现 let

    • switch 语句允许多个 case 匹配同一个值,不过如果存在多个可匹配分支的时候,只会执行第一个被匹配到的 case 块。

    • switch 语言中每一个 case 块都必须包含至少一条语句。

    • 如果 case 能够包含 switch 中的所有情况,那么没有 default 也是可以的。

    • switch 语言中每个 case 块后的匹配条件可以有多个,也可以是范围,每个匹配条件之间用逗号隔开。switch 语句不会同时匹配大些字母和小写字母。 如:case 1, 2, 3, 4, 5,

      let a = 85switch a {    case 1..<80:        print("bad")    case 80..<90:        print("good")    default:        print("OK")}
    • 可以使用元组在同一个 switch 语句中匹配多个值,元组中的元素可以是值,也可以是范围。

      let a = (1, 1)switch a {    case (0, 0):        print("00 坐标")    case (0, 1):        print("01 坐标")    default:        print("OK")}

2、循环结构

2.1 for 循环语句

  • 1)for-in 语句

    • 在 Swift 中最常使用的 for 循环是 for-in 结构,并且可以和范围(.....<)配合使用。

      for 循环变量 in 
      <范围,集合,队列...>
      { statements}
    • 当不需要使用范围内的每一项的值时,可以使用下划线 _ 作为循环变量名来忽略对值的访问。

    • 遍历字典时,字典的每项元素会以 (key, value) 元组的形式返回。

    • 循环变量不需要使用 var 声明。

      for num in 0...10 {    print(num)}
  • 2)for 语句

    • 在 Swift 3.0 中 C 语言样式的 for 循环语句被废弃。Range、Array、Dictionary 都可以使用 for-in 循环。

      for initialization; condation; increment {    statements}
    • initialization:初始化表达式,condation:循环条件,increment:改变循环条件的表达式。

2.2 while 循环语句

  • 1)while 语句

    • while 循环语句除了作为传统的控制流,还可以用在对可选型的解包以及模式匹配中。

      while expression {    statements}
  • 2)repeat-while 语句

    • 在 Swift 3.0 中 C 语言样式的 do-while 循环语句被废弃,使用 repeat-while 循环语句代替。

      repeat {    statements} while expression

3、控制转向语句

  • continue:会通知一个循环体立即停止本次循环,直接回到循环条件判断,重新开始下次循环。

  • break:会立即中断该循环体,然后跳转到表示循环体结束的大括号后的第一行代码,即跳出本层循环体。可以在 switch 和循环结构中使用。

  • fallthrough:在 switch 语句中使代码继续执行到下一个 case 中的代码,而不会检查它下一个将会落入执行的 case 中的条件是否匹配,从而达到和 C 语言标准中 switch 语句特性一样的效果。

  • 标签语句:Swift 语言提供了更强大的跳出机制,你可以显式的指出需要跳出的是哪一层循环或 switch 结构。为了实现这个目的,我们可以使用标签来为循环体或者 switch 代码打上标记,当需要使用 break 或者 continue 时,带上这个标签就可以控制跳出或中断的是哪一个循环或 switch 结构。

    labelName: for number in sArray {    statements}// 跳出 loopName 循环break labelName

转载地址:http://ougfl.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
1.python入门到精通
查看>>
通过vue-cli来学习修改Webpack多环境配置和发布问题
查看>>
Exchange Server 2013 高可用部署系列(四)邮箱服务器高可用——数据库可用性组(DAG)...
查看>>
和尚挑水的故事给我们带来的思想
查看>>
Zookeeper工作原理
查看>>
(转)我为什么鼓励工程师写blog
查看>>
mysql数据恢复
查看>>
每秒处理10万订单乐视集团支付架构
查看>>
study
查看>>
错误: 无法将文件“obj\Debug\Web.dll”复制到“bin\Web.dll”。对路径“bin\Web.dll”的访问被拒绝...
查看>>
jquery怎么实现左右滑动的问题
查看>>
hadoop(11)yarn状态机
查看>>
SSH中web.xml
查看>>
金中半日baoling游-----stoi
查看>>
HTTP协议
查看>>
Linux查看用户及分组
查看>>
Demo 6:完整的用户体验演示
查看>>
使用脚本方式和使用控件方式来输出Html内容的区别
查看>>
P5038 [SCOI2012]奇怪的游戏
查看>>