     print("(\(x), \(y) is just some arbitrary point)")
 }
 
+// 复合型Cases
+/*
+ 当多个条件可以使用同一种方法处理时，可以将这几种可能放在同一个case后面，并且用逗号隔开。
+ 当case后面的任意一种模式匹配的时候，这条分支就会被匹配。
+ 如果匹配列表过长，还可以分行书写
+ */
+let otherSomeCharacter: Character = "e"
+switch otherSomeCharacter {
+case "a", "e", "i", "o", "u":
+    print("\(otherSomeCharacter) is vowel")
+case "b", "c", "d", "f", "g", "h", "j", "k", "l", "m",
+     "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z":
+    print("\(otherSomeCharacter) is a consonant")
+default:
+    print("\(otherSomeCharacter) id not a vowel or a consonant")
+}
+
+/*
+ 复合匹配同样可以包含值绑定。
+ 复合匹配里所有的匹配模式，都必须包含相同的值绑定，并且每一个绑定都必须获取到相同类型的值。
+ */
+let stillAnotherPoint = (9, 0)
+switch stillAnotherPoint {
+case (let distance, 0), (0, let distance):
+    print("On an axis, \(distance) from the origin")
+default:
+    print("Not on an axis")
+}
+
 // 控制转移语句
-// continue 语句告诉一个循环体立刻停止本次循环迭代，重新开始下次循环迭代。
-let puzzlelnput = "greet minds think alike"
-var puzzleputput = ""
-for character in puzzlelnput.characters {
+// continue
+/*
+ continue语句告诉一个循环体立刻停止本次循环迭代，重新开始下次循环迭代。
+ */
+let puzzleInput = "greet minds think alike"
+var puzzleOutput = ""
+for character in puzzleInput {
     switch character {
     case "a", "e", "i", "o", "u", " ":
         continue
     default:
-        puzzleputput.append(character)
-    }
-}
-print(puzzleputput)
-
-// break 会立即结束整个控制流的执行。
-// 循环语句中的break，当在一个循环体中使用break时，会立刻中断该循环体的执行，然后跳转到表示循环体结束的大括号}后的第一行代码。不会本次循环迭代的代码被执行，也不会再有下次的循环迭代产生。
-// Switch语句中的break，switch代码块中使用break时，会立即中断该switch代码块的执行，并且跳转到表示switch代码块结束的大括号}后的第一行代码。
+        puzzleOutput.append(character)
+    }
+}
+print(puzzleOutput)
+
+// break
+/*
+ break会立即结束整个控制流的执行。
+ break可以在switch或循环语句中使用，用来提前结束switch或循环语句
+ 循环语句中的break，当在一个循环体中使用break时，会立刻中断该循环体的执行，然后跳转到表示循环体结束的大括号}后的第一行代码。不会本次循环迭代的代码被执行，也不会再有下次的循环迭代产生。
+  Switch语句中的break，switch代码块中使用break时，会立即中断该switch代码块的执行，并且跳转到表示switch代码块结束的大括号}后的第一行代码。
+ */
 let numberSymbol: Character = "三"
 var possinleIntegerValue: Int?
 switch numberSymbol {

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

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

}

// 贯穿 fallthroungh
/*
 switch不存在隐式贯穿，所以要更加清晰和可预测，可以避免无意识地执行多个case分支从而引发的错误。
 如果需要C风格的贯穿特性，则在每个需要该特性的case分支中使用fallthrough关键字。
 */
let integerToDescribe = 5
var description = "The number \(integerToDescribe) is"
switch integerToDescribe {
