 import Cocoa
 
 // 控制流
-// for循环, swift提供两种for循环来按照指定的次数多次执行一系列语句。
-// for in
+// for-in循环
+/*
+ 遍历一个数组所有元素
+ */
+let names = ["Anna", "Alex", "Brian", "Jack"]
+for name in names {
+    print("Hello, \(name)")
+}
+
+/*
+ 遍历一个字典
+ */
+let numberOfLegs = ["spider": 8, "ant":6, "cat": 4]
+for (animalName, legCount) in numberOfLegs {
+    print("\(animalName)s have \(legCount) legs")
+}
+
+/*
+ for-in循环还可以使用数字范围。
+ */
 for index in 1...5 {
-    print("\(index) times 5 is \(index * 5)")
-}
-
-// index是一个每次循环遍历开始时被自动赋值的常量。这种情况下，index在使用前不需要声明，只需要将它包含在循环的声明中，就可以对其进行隐式声明，而无需使用let关键字声明。
-// 如果不需要区间序列内每一项的值，可以使用下划线_替代变量名来忽略对值得访问。
-
+    print("\(index) times 5 is \(index * 5)") // index是一个每次循环遍历开始时被自动赋值的常量。这种情况下，index在使用前不需要声明，只需要将它包含在循环的声明中，就可以对其进行隐式声明，而无需使用let关键字声明。
+}
+
+/*
+ 如果如果不需要区间序列内每一项的值，可以使用下滑线_替代变量名来忽略这个值。
+ */
 let base = 3
 let power = 10
 var answer = 1
 for _ in 1...power {
     answer *= base
 }
-print(answer)
-
-// 遍历数组
-let names = ["Anna", "Alex", "Brian", "Jack"]
-for name in names {
-    print("Hello, \(name)!")
-}
-
-// 遍历字典
-let numberOfLegs = ["spider":8, "ant":6, "cat":4]
-for (animalName, legCount) in numberOfLegs {
-    print("\(animalName)s have \(legCount) legs")
-}
-
-// for Swift3要废弃
-//for var index = 0; index < 3; index++ {
-//    print("index is \(index)")
-//}
-// 在初始化表达式中声明的常量和变量只在for循环的声明周期里有效。
+print("\(base) to be power of \(power) is \(answer)")
+
+/*
+ 使用半开区间运算符
+ */
+let minutes = 60
+for tickMark in 0..<minutes {
+    print(tickMark) // 每一分钟都渲染一个刻度线(60次)
+}
+
+/*
+ 使用stride(from:to:by:) 函数跳过不需要的标记
+ */
+let minuteInterval = 5
+for tickMark in stride(from: 0, to: minuteInterval, by: minutes) {
+    print(tickMark) // 每五分钟渲染一个刻度线(0,5,10,15,20,25,30...45,50,55)
+}
+
+/*
+ 可以在闭区间使用 stride(from:through:by:) 起到同样作用
+ */
+let hours = 12
+let hoursInterval = 3
+for tickMark in stride(from: 3, through: hours, by: hoursInterval) {
+    print(tickMark) // 每3小时渲染一个刻度线(3,6,9,12)
+}
 
 // While循环
-// 运行一系列语句直到条件变成false。这类循环适合使用在第一次迭代前迭代次数未知的情况下。
-// while 循环从计算单一条件开始，如果条件为true，会重复运行一系列语句，直到条件变为false。
-
-// Repeat-While 在判断循环条件之前，先执行一次循环的代码块，然后重复循环直到条件为false。
+/*
+ 运行一系列语句直到条件变成false。这类循环适合使用在第一次迭代前迭代次数未知的情况下。
+ swift提供两种while循环形式
+ while：循环，每次在循环开始时计算条件是否符合。循环从计算单一条件开始，如果条件为true，会重复运行一系列语句，直到条件变为false。
+ Repeat-While 循环，每次在循环结束时计算条件是否符合。在判断循环条件之前，先执行一次循环的代码块，然后重复循环直到条件为false。
+ */
+
+// while
+let finalSquare = 25
+var board = [Int](repeating: 0, count: finalSquare + 1)
+board[03] = +08; board[06] = +11; board[09] = +09; board[10] = +02
+board[14] = -10; board[19] = -11; board[22] = -02; board[24] = -08
+
+var square = 0
+var diceRoll = 0
+print("Game Start!")
+while square < finalSquare {
+    diceRoll += 1
+    if diceRoll == 7 {
+        diceRoll = 1
+    }
+    square += diceRoll
+    if square < board.count {
+        square += board[square]
+    }
+    print("当前在第\(square)格")
+}
+print("Game Over!")
+
+// Repeat-While
+square = 0
+diceRoll = 0
+print("Game Start!")
+repeat {
+    // 顺着梯子爬上去或者顺着蛇滑下去
+    square += board[square]
+    // 掷骰子
+    diceRoll += 1
+    if diceRoll == 7 {
+        diceRoll = 1
+    }
+    square += diceRoll
+    print("当前在第\(square)格")
+} while square < finalSquare
+print("Game Over!")
 
 // 条件语句
-// if语句最简单的形式就是只包含一个条件，当且仅当该条件为true时，才执行相关代码
+/*
+ if语句：当条件较为简单且可能的情况很少时
+ switch语句：适用于条件较复杂、有更多排列组合的时候。并且在需要用到模式匹配的情况下会更有用。
+ */
+
+// if
+/*
+ if语句最简单的形式就是只包含一个条件，当且仅当该条件为true时，才执行相关代码
+ */
 var temperaturelnFahrenheit = 90
 if temperaturelnFahrenheit <= 32 {
     print("It's very cold. Consider wearing a scarf.")

print(description)

// 带标签的语句
// 显示地指明break语句想要终止的是哪个循环体或者switch代码块
var i = 0
whileOne: while i < 10 {
    switch i {

    print("somewhere else at (\(x), \(y))")
}

// where
/*
 case分支的模式可以使用where语句来判断额外的条件
 */
let yetAnotherPoint = (1, -1)
switch yetAnotherPoint {
case let (x, y) where x == y:
