Swift学习笔记(四)·控制流、枚举

164 阅读3分钟

引言:Swift 提供了多种流程控制结构,包括可以多次执行任务的 while 循环,基于特定条件选择执行不同代码分支的 if、guard 和 switch 语句,还有控制流程跳转到其他代码位置的 break 和 continue 语句。Swift 的 switch 语句比许多类 C 语言要更加强大

For-In循环

在之前数组、字典内均已提及过遍历,在此只是补充一下区间运算符

   let list = ["1","2","3","4","5"]
   1.闭区间运算符:闭区间运算符(a...b)定义一个包含从 ab(包括 ab)的所有值的区间。a 的值不能超过 b。如:
   for string in list[0...2] {
       print(string)
   }
   输出为:1 2 3
   2.半区间运算符:半开区间运算符(a..<b)定义一个从 ab 但不包括 b 的区间。 之所以称为半开区间,是因为该区间包含第一个值而不包括最后的值。如:
   for string in list[0..<2] {
       print(string)
   }
   输出为:1 2 
   3.单侧区间运算符:闭区间操作符的另一个表达形式,可以表达往一侧无限延伸的区间,如:
   for string in list[2...] {
       print(string)
   }
   输出为:3 4 5
   单侧区间也可以添加 < 或 > 如:
   for string in list[2<..] {
       print(string)
   }
   输出为:4 5

While循环

while 循环会一直运行一段语句直到条件变成 false。这类循环适合使用在第一次迭代前,迭代次数未知的情况下。 Swift 提供两种 while 循环形式: while 循环,每次在循环开始时计算条件是否符合; repeat-while 循环,每次在循环结束时计算条件是否符合。

定义

   var index = 0
   while index < 5 {
      index+=1(注意+=必须紧靠属性后)
      print(index)
   }
   print("完成")
   输出为:1 2 3 4 5 完成
   
   var index = 5
   repeat{
      index+=1
      print(index)
   }while index < 5
   print("完成")
   输出为:6 完成 

枚举(仅描写枚举基础用法)

引言:枚举为一组相关的值定义了一个共同的类型,使你可以在你的代码中以类型安全的方式来使用这些值。

定义

   enum NumberType{
    // 枚举定义放在这里
   }
   代表为一个空枚举
   enum NumberType:Int{
    // 枚举定义放在这里
    case OneType = 1
    case TwoType
    case ThreeType
   }
   代表该枚举的成员赋值为Int类型,还可将所有成员值放置在同一行,用","隔开

用法

   let type = NumberType.OneType
   let type:NumberType = .OneType

条件语句

引言:Swift 提供两种类型的条件语句:if 语句和 switch 语句。通常,当条件较为简单且可能的情况很少时,使用 if 语句。而 switch 语句更适用于条件较复杂、有更多排列组合的时候。并且 switch 在需要用到模式匹配(pattern-matching)的情况下会更有用。

**1.if **

if语句最简单的形式就是只包含一个条件,只有该条件为 true 时,才执行相关代码,如:

   let num = 5
   if num > 2 {
      print("正确")
   }else{
      print("错误")
   }

你可以把多个 if 语句链接在一起,来实现更多分支:如:

   let num = 10
   if num > 15 {
       print("大于15")
    }else if num > 5{
       print("大于5")
    }else{
       print("错误")
    }
    输出为:大于5

guard语句

像 if 语句一样,guard 的执行取决于一个表达式的布尔值。我们可以使用 guard 语句来要求条件必须为真时,以执行 guard 语句后的代码。不同于 if 语句,一个 guard 语句总是有一个 else 从句,如果条件不为真则执行 else 从句中的代码。 定义:

    let num:Int = 10
    guard num > 10 else {
        print("结束")
        return
    }
    注意:1.当判断条件==false时,这个分支代码必须转移控制以退出 guard 语句出现的代码段。它可以用控制转移语句如 returnbreakcontinue 或者 throw 做这件事,或者调用一个不返回的方法或函数,例如 fatalError()。
         2. 

2.Swich

switch 语句会尝试把某个值与若干个模式(pattern)进行匹配。根据第一个匹配成功的模式,switch 语句会执行对应的代码。当有可能的情况较多时,通常用 switch 语句替换 if 语句。如:

    let type = NumberType.OneType
    switch type {
    case .OneType(在值已确定类型枚举时,可以直接用点语法):
        print("我是one")
    case .TwoType:
         print("我是two")
    case NumberType.ThreeType:
         print("我是three")
    default:
        print("都没有")
    }
    输出为:我是one
    注意:1.每个case下必须有内容处理
         2.与 C 和 Objective-C 中的 switch 语句不同,在 Swift 中,当匹配的 case 分支中的代码执行完毕后,程序会终止 switch 语句,而不会继续执行下一个 case 分支。这也就是说,不需要在 case 分支中显式地使用 break 语句。

case 分支的模式可以使用 where 语句来判断额外的条件。如

    let num:Int = 10
    switch num {
    case let number where number > 2:
    print("大于2")
    case let number where number > 5:
    print("大于5")
    }
    输出为:大于2

3.控制转译语句

控制转移语句改变你代码的执行顺序,通过它可以实现代码的跳转。Swift 有五种控制转移语句: continue、break、fallthrough、return、throw 我们将会在下面讨论 continue、break 和 fallthrough、return语句。

(1)continue:会立即结束本次循环开启下一轮循环,如:

     var num = 5;
     for index in 0..<10 {
        if index == num {
             num+=1
             continue
         }
    }
    它会在第一次index == 5时,num自增加一,结束本次循环,然后开启新一轮循环(第二次会在index == 6时开启下一轮,依次类推)

(2)beak:会立即结束本次循环,如:

    var num = 5;
    for index in 0..<10 {
       if index == num {
            num+=1
            continue
        }
   }
   它会在第一次index == 5时,结束本次循环

(3)fallthrough:仅限用于swich语句内,用于判断条件生效后,可接着判断下一条件,如:

    let num:Int = 10
    switch num {
    case let number where number > 2:
    print("大于2")
    fallthrough
    case let number where number > 5:
    print("大于5")
    fallthrough
    default:
        print("默认")
    }
    输出为:大于2 大于5 默认

(4)return:结束本次循环,并终止执行以下语句,如:

    let num:Int = 10
    if  num > 5 {
        print("结束")
        return
    }
    print("你好")
    输出为:结束