Swift 控制流

前言

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

1、条件分支结构

1.1 if 语句

  • 1)if 语句

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

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

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

      1
      2
      3
      4
      if let 常量 = 可选型变量 {
      statements 1
      }
      statements 2
      1
      2
      3
      4
      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 中判断条件的情况,最后处理条件为真时的操作。

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

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

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

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

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

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

1.3 switch 语句

  • 1)switch 语句

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

      1
      2
      3
      4
      5
      6
      7
      8
      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,

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

      1
      2
      3
      4
      5
      6
      7
      8
      9
      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 结构,并且可以和范围(.....<)配合使用。

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

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

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

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

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

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

2.2 while 循环语句

  • 1)while 语句

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

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

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

      1
      2
      3
      repeat {
      statements
      } while expression

3、控制转向语句

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

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

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

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

    1
    2
    3
    4
    5
    6
    labelName: for number in sArray {
    statements
    }

    // 跳出 loopName 循环
    break labelName
文章目录
  1. 1. 前言
  2. 2. 1、条件分支结构
    1. 2.1. 1.1 if 语句
    2. 2.2. 1.2 guard 语句
    3. 2.3. 1.3 switch 语句
  3. 3. 2、循环结构
    1. 3.1. 2.1 for 循环语句
    2. 3.2. 2.2 while 循环语句
  4. 4. 3、控制转向语句
隐藏目录