 }
 print(i)
 
+square = 0
+diceRoll = 0
+gameLoop: while square != finalSquare {
+    diceRoll += 1
+    if diceRoll == 7 {
+        diceRoll = 1
+    }
+    switch square + diceRoll {
+    case finalSquare:
+        // 骰子数刚好使玩家移动到最终的方格里，游戏结束
+        break gameLoop
+    case let newSquare where newSquare > finalSquare:
+        // 骰子数将会使玩家移动超出最后的方格，那么这种移动是不合法的，玩家需要重新掷骰子
+        continue gameLoop
+    default:
+        // 合法移动，做正常处理
+        square += diceRoll
+        square += board[square]
+    }
+}
+
 // 提前退出
-// guard的执行取决于一个表达式的布尔值。我们可以使用guard语句来要求条件必须为真时,以执行guard语句后的代码。不同于if语句，一个guard语句总是有一个else分句，如果条件不为真则执行else分句中的代码。
-
-func checkup(person: [String: String!]) {
-    // 检查身份证，如果没有带，则不能进入考场
-    guard let idCard = person["idCard"] else {
-        print("没有身份证，不能进入考场！")
+/*
+ guard的执行取决于一个表达式的布尔值。
+ 我们可以使用guard语句来要求条件必须为真时,以执行guard语句后的代码。不同于if语句，一个guard语句总是有一个else分句，如果条件不为真则执行else分句中的代码。
+ 如果guard语句的条件被满足，则继续执行gurad语句大括号后的代码。将变量或常量的可选绑定作为guard语句的条件，都可以保护guard语句后面的代码。
+ 如果条件不满足，在else分支上的代码就会被执行。这个分支必须转移控制以退出guard语句出现的代码段。它可以用控制转移语句如return、break、continue或者throw做这件事，或者调用一个不返回的方法或函数。
+ */
+
+func great(person: [String: String]) {
+    guard let name = person["name"] else {
         return
     }
-    // 检查准考证，如果没有带，则不能进入考场
-    guard let examNumber = person["examNumber"] else {
-        print("没有准考证，不能进入考场！")
+    print("Hello \(name)!")
+    guard let location = person["location"] else {
+        print("I hope the weather is nice near you.")
         return
     }
-    print("您的身份证号为：\(idCard), 准考证为：\(examNumber)。请进入考场！")
-}
-
-checkup(["idCard":"123456"])
-checkup(["examNumber":"4352"])
-checkup(["idCard":"123456", "examNumber":"3453245"])
-
-// 任何使用了可选绑定作为条件的一部分并被分配了值得变量或常量对于剩下的保护语句出现的代码段是可用的。如果条件不满足，else分支上的代码就会被执行。这个分支必须转移控制以退出guard语句出现的代码段。
+    print("I hope the weather is nice in \(location).")
+
+}
+
+great(person: ["name": "Jhon"])
+great(person: ["name": "Jane", "location": "Cupertino"])
+
 
 // 检测API可用性
-if #available(iOS 9, OSX 10.10, watchOS 2.0, *) {
-    // 在iOS使用iOS9的API，在OS X 使用OS X v10.10的API
+if #available(iOS 9, macOS 10.10, watchOS 2.0, *) {
+    // 在iOS使用iOS9的API，在macOS 使用macOS v10.10的API
 } else {
     // 使用先前版本的iOS和OS X的API
 }

import Cocoa

// 控制流
// for循环, swift提供两种for循环来按照指定的次数多次执行一系列语句。
// for in
for index in 1...5 {
    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循环的声明周期里有效。

// While循环
// 运行一系列语句直到条件变成false。这类循环适合使用在第一次迭代前迭代次数未知的情况下。
// while 循环从计算单一条件开始，如果条件为true，会重复运行一系列语句，直到条件变为false。

// Repeat-While 在判断循环条件之前，先执行一次循环的代码块，然后重复循环直到条件为false。

// 条件语句
// 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 {
