diff --git a/source/chapter2/02_Basic_Operators.md b/source/chapter2/02_Basic_Operators.md
index 9e0f872e..a850368b 100755
--- a/source/chapter2/02_Basic_Operators.md
+++ b/source/chapter2/02_Basic_Operators.md
@@ -44,22 +44,27 @@ Swift 支持大部分标准 C 语言的运算符,且改进许多特性来减
赋值运算(`a = b`),表示用`b`的值来初始化或更新`a`的值:
- let b = 10
- var a = 5
- a = b
- // a 现在等于 10
+```swift
+let b = 10
+var a = 5
+a = b
+// a 现在等于 10
+```
如果赋值的右边是一个多元组,它的元素可以马上被分解成多个常量或变量:
- let (x, y) = (1, 2)
- // 现在 x 等于 1, y 等于 2
+```swift
+let (x, y) = (1, 2)
+// 现在 x 等于 1, y 等于 2
+```
与 C 语言和 Objective-C 不同,Swift 的赋值操作并不返回任何值。所以以下代码是错误的:
- if x = y {
- // 此句错误, 因为 x = y 并不返回任何值
- }
-
+```swift
+if x = y {
+ // 此句错误, 因为 x = y 并不返回任何值
+}
+```
这个特性使你无法把(`==`)错写成(`=`),由于`if x = y`是错误代码,Swift帮你避免此类错误的的发生。
@@ -73,18 +78,20 @@ Swift 中所有数值类型都支持了基本的四则算术运算:
- 乘法(`*`)
- 除法(`/`)
- 1 + 2 // 等于 3
- 5 - 3 // 等于 2
- 2 * 3 // 等于 6
- 10.0 / 2.5 // 等于 4.0
-
-
+```swift
+1 + 2 // 等于 3
+5 - 3 // 等于 2
+2 * 3 // 等于 6
+10.0 / 2.5 // 等于 4.0
+```
与 C 语言和 Objective-C 不同的是,Swift 默认情况下不允许在数值运算中出现溢出情况。但是你可以使用 Swift 的溢出运算符来实现溢出运算(如`a &+ b`)。详情参见[溢出运算符](./24_Advanced_Operators.html#overflow_operators)。
加法运算符也可用于`String`的拼接:
- "hello, " + "world" // 等于 "hello, world"
+```swift
+"hello, " + "world" // 等于 "hello, world"
+```
### 求余运算符
@@ -101,8 +108,9 @@ Swift 中所有数值类型都支持了基本的四则算术运算:
在 Swift 中可以表达为:
- 9 % 4 // 等于 1
-
+```swift
+9 % 4 // 等于 1
+```
为了得到`a % b`的结果,`%`计算了以下等式,并输出`余数`作为结果:
@@ -114,10 +122,11 @@ Swift 中所有数值类型都支持了基本的四则算术运算:
9 = (4 × 2) + 1
+同样的方法,我们来计算 `-9 % 4`:
-同样的方法,我来们计算 `-9 % 4`:
-
- -9 % 4 // 等于 -1
+```swift
+-9 % 4 // 等于 -1
+```
把`-9`和`4`代入等式,`-2`是取到的最大整数:
@@ -131,7 +140,9 @@ Swift 中所有数值类型都支持了基本的四则算术运算:
不同于 C 语言和 Objective-C,Swift 中是可以对浮点数进行求余的。
- 8 % 2.5 // 等于 0.5
+```swift
+8 % 2.5 // 等于 0.5
+```
这个例子中,`8`除于`2.5`等于`3`余`0.5`,所以结果是一个`Double`值`0.5`。
@@ -140,11 +151,11 @@ Swift 中所有数值类型都支持了基本的四则算术运算:
### 自增和自减运算
和 C 语言一样,Swift 也提供了对变量本身加1或减1的自增(`++`)和自减(`--`)的缩略算符。其操作对象可以是整形和浮点型。
-
-
- var i = 0
- ++i // 现在 i = 1
+```swift
+var i = 0
+++i // 现在 i = 1
+```
每调用一次`++i`,`i`的值就会加1。实际上,`++i`是`i = i + 1`的简写,而`--i`是`i = i - 1`的简写。
@@ -157,9 +168,11 @@ Swift 中所有数值类型都支持了基本的四则算术运算:
例如:
- var a = 0
- let b = ++a // a 和 b 现在都是 1
- let c = a++ // a 现在 2, 但 c 是 a 自增前的值 1
+```swift
+var a = 0
+let b = ++a // a 和 b 现在都是 1
+let c = a++ // a 现在 2, 但 c 是 a 自增前的值 1
+```
上述例子,`let b = ++a`先把`a`加1了再返回`a`的值。所以`a`和`b`都是新值`1`。
@@ -172,19 +185,22 @@ Swift 中所有数值类型都支持了基本的四则算术运算:
数值的正负号可以使用前缀`-`(即一元负号)来切换:
- let three = 3
- let minusThree = -three // minusThree 等于 -3
- let plusThree = -minusThree // plusThree 等于 3, 或 "负负3"
-
+```swift
+let three = 3
+let minusThree = -three // minusThree 等于 -3
+let plusThree = -minusThree // plusThree 等于 3, 或 "负负3"
+```
一元负号(`-`)写在操作数之前,中间没有空格。
### 一元正号运算符
-一元正号(`+`)不做任何改变地返回操作数的值。
+一元正号(`+`)不做任何改变地返回操作数的值:
- let minusSix = -6
- let alsoMinusSix = +minusSix // alsoMinusSix 等于 -6
+```swift
+let minusSix = -6
+let alsoMinusSix = +minusSix // alsoMinusSix 等于 -6
+```
虽然一元`+`什么都不会改变,但当你在使用一元负号来表达负数时,你可以使用一元正号来表达正数,如此你的代码会具有对称美。
@@ -194,9 +210,10 @@ Swift 中所有数值类型都支持了基本的四则算术运算:
如同 C 语言,Swift 也提供把其他运算符和赋值运算(`=`)组合的复合赋值运算符,组合加运算(`+=`)是其中一个例子:
- var a = 1
- a += 2 // a 现在是 3
-
+```swift
+var a = 1
+a += 2 // a 现在是 3
+```
表达式`a += 2`是`a = a + 2`的简写,一个组合加运算就是把加法运算和赋值运算组合成进一个运算符里,同时完成两个运算任务。
@@ -208,7 +225,7 @@ Swift 中所有数值类型都支持了基本的四则算术运算:
## 比较运算符
-所有标准 C 语言中的比较运算都可以在 Swift 中使用。
+所有标准 C 语言中的比较运算都可以在 Swift 中使用:
- 等于(`a == b`)
- 不等于(`a != b`)
@@ -222,26 +239,26 @@ Swift 也提供恒等`===`和不恒等`!==`这两个比较符来判断两个对
每个比较运算都返回了一个标识表达式是否成立的布尔值:
-
- 1 == 1 // true, 因为 1 等于 1
- 2 != 1 // true, 因为 2 不等于 1
- 2 > 1 // true, 因为 2 大于 1
- 1 < 2 // true, 因为 1 小于2
- 1 >= 1 // true, 因为 1 大于等于 1
- 2 <= 1 // false, 因为 2 并不小于等于 1
-
+```swift
+1 == 1 // true, 因为 1 等于 1
+2 != 1 // true, 因为 2 不等于 1
+2 > 1 // true, 因为 2 大于 1
+1 < 2 // true, 因为 1 小于2
+1 >= 1 // true, 因为 1 大于等于 1
+2 <= 1 // false, 因为 2 并不小于等于 1
+```
比较运算多用于条件语句,如`if`条件:
-
- let name = "world"
- if name == "world" {
- print("hello, world")
- } else {
- print("I'm sorry \(name), but I don't recognize you")
- }
- // 输出 "hello, world", 因为 `name` 就是等于 "world"
-
+```swift
+let name = "world"
+if name == "world" {
+ print("hello, world")
+} else {
+ print("I'm sorry \(name), but I don't recognize you")
+}
+// 输出 "hello, world", 因为 `name` 就是等于 "world"
+```
关于`if`语句,请看[控制流](./05_Control_Flow.html)。
@@ -252,32 +269,36 @@ Swift 也提供恒等`===`和不恒等`!==`这两个比较符来判断两个对
三目运算符是以下代码的缩写形式:
- if question {
- answer1
- } else {
- answer2
- }
+```swift
+if question {
+ answer1
+} else {
+ answer2
+}
+```
-这里有个计算表格行高的例子。如果有表头,那行高应比内容高度要高出50像素; 如果没有表头,只需高出20像素。
+这里有个计算表格行高的例子。如果有表头,那行高应比内容高度要高出50点;如果没有表头,只需高出20点:
- let contentHeight = 40
- let hasHeader = true
- let rowHeight = contentHeight + (hasHeader ? 50 : 20)
- // rowHeight 现在是 90
+```swift
+let contentHeight = 40
+let hasHeader = true
+let rowHeight = contentHeight + (hasHeader ? 50 : 20)
+// rowHeight 现在是 90
+```
+上面的写法比下面的代码更简洁:
-这样写会比下面的代码简洁:
-
- let contentHeight = 40
- let hasHeader = true
- var rowHeight = contentHeight
- if hasHeader {
- rowHeight = rowHeight + 50
- } else {
- rowHeight = rowHeight + 20
- }
- // rowHeight 现在是 90
-
+```swift
+let contentHeight = 40
+let hasHeader = true
+var rowHeight = contentHeight
+if hasHeader {
+ rowHeight = rowHeight + 50
+} else {
+ rowHeight = rowHeight + 20
+}
+// rowHeight 现在是 90
+```
第一段代码例子使用了三目运算,所以一行代码就能让我们得到正确答案。这比第二段代码简洁得多,无需将`rowHeight`定义成变量,因为它的值无需在`if`语句中改变。
@@ -293,7 +314,9 @@ Swift 也提供恒等`===`和不恒等`!==`这两个比较符来判断两个对
空合并运算符是对以下代码的简短表达方法
- a != nil ? a! : b
+```swift
+a != nil ? a! : b
+```
上述代码使用了三目运算符。当可选类型`a`的值不为空时,进行强制解封(`a!`)访问`a`中值,反之当`a`中值为空时,返回默认值b。无疑空合运算符(`??`)提供了一种更为优雅的方式去封装条件判断和解封两种行为,显得简洁以及更具可读性。
@@ -302,21 +325,24 @@ Swift 也提供恒等`===`和不恒等`!==`这两个比较符来判断两个对
下文例子采用空合并运算符,实现了在默认颜色名和可选自定义颜色名之间抉择:
+```swift
+let defaultColorName = "red"
+var userDefinedColorName: String? //默认值为 nil
- let defaultColorName = "red"
- var userDefinedColorName:String? //默认值为nil
- var colorNameToUse = userDefinedColorName ?? defaultColorName
- //userDefinedColorName的值为空 ,所以colorNameToUse的值为`red`
-
+var colorNameToUse = userDefinedColorName ?? defaultColorName
+// userDefinedColorName 的值为空,所以 colorNameToUse 的值为 "red"
+```
`userDefinedColorName`变量被定义为一个可选`String`类型,默认值为`nil`。由于`userDefinedColorName`是一个可选类型,我们可以使用空合运算符去判断其值。在上一个例子中,通过空合运算符为一个名为`colorNameToUse`的变量赋予一个字符串类型初始值。
-由于`userDefinedColorName`值为空,因此表达式` userDefinedColorName ?? defaultColorName `返回`defaultColorName`的值,即`red`。
+由于`userDefinedColorName`值为空,因此表达式`userDefinedColorName ?? defaultColorName`返回`defaultColorName`的值,即`red`。
-另一种情况,分配一个非空值(`non-nil`)给 `userDefinedColorName`,再次执行空合运算,运算结果为封包在`userDefaultColorName`中的值,而非默认值。
+另一种情况,分配一个非空值(`non-nil`)给`userDefinedColorName`,再次执行空合运算,运算结果为封包在`userDefaultColorName`中的值,而非默认值。
- userDefinedColorName = "green"
- colorNameToUse = userDefinedColorName ?? defaultColorName
- //userDefinedColorName非空,因此colorNameToUsede的值为绿色
+```swift
+userDefinedColorName = "green"
+colorNameToUse = userDefinedColorName ?? defaultColorName
+// userDefinedColorName 非空,因此 colorNameToUse 的值为 "green"
+```
## 区间运算符
@@ -328,15 +354,16 @@ Swift 提供了两个方便表达一个区间的值的运算符。
闭区间运算符在迭代一个区间的所有值时是非常有用的,如在`for-in`循环中:
- for index in 1...5 {
- print("\(index) * 5 = \(index * 5)")
- }
- // 1 * 5 = 5
- // 2 * 5 = 10
- // 3 * 5 = 15
- // 4 * 5 = 20
- // 5 * 5 = 25
-
+```swift
+for index in 1...5 {
+ print("\(index) * 5 = \(index * 5)")
+}
+// 1 * 5 = 5
+// 2 * 5 = 10
+// 3 * 5 = 15
+// 4 * 5 = 20
+// 5 * 5 = 25
+```
关于`for-in`,请看[控制流](./05_Control_Flow.html)。
@@ -345,19 +372,19 @@ Swift 提供了两个方便表达一个区间的值的运算符。
半开区间(`a..