修改第二章部分细节 (#830)

This commit is contained in:
Karsa Wu
2018-11-19 01:22:20 +08:00
committed by Jie Liang
parent c1be0a2755
commit d8dc27c992

View File

@ -2,7 +2,7 @@
*运算符*是检查、改变、合并值的特殊符号或短语。例如,加号(`+`)将两个数相加(如 `let i = 1 + 2`)。更复杂的运算例子包括逻辑与运算符 `&&`(如 `if enteredDoorCode && passedRetinaScan`)。
Swift 支持大部分标准 C 语言的运算符,且改进许多特性来减少常编码错误。如:赋值符(`=`)不返回值,以防止把想要判断相等运算符(`==`的地方写成赋值符导致的错误。算术运算符(`+``-``*``/``%` 等)会检测并不允许值溢出,以此来避免保存变量时由于变量大于或小于其类型所能承载的范围时导致的异常结果。当然允许你使用 Swift 的溢出运算符来实现溢出。详情参见[溢出运算符](./26_Advanced_Operators.html#overflow_operators)。
Swift 支持大部分标准 C 语言的运算符,且为了减少常编码错误做了部分改进。如:赋值符(`=`)不再有返回值,这样就消除了手误将判等运算符(`==`)写成赋值符导致代码错误的缺陷。算术运算符(`+``-``*``/``%` 等)的结果会被检测并禁止值溢出,以此来避免保存变量时由于变量大于或小于其类型所能承载的范围时导致的异常结果。当然允许你使用 Swift 的溢出运算符来实现溢出。详情参见[溢出运算符](./26_Advanced_Operators.html#overflow_operators)。
Swift 还提供了 C 语言没有的区间运算符,例如 `a..<b``a...b`,这方便我们表达一个区间内的数值。
@ -38,7 +38,7 @@ let (x, y) = (1, 2)
// 现在 x 等于 1y 等于 2
```
与 C 语言和 Objective-C 不同Swift 的赋值操作并不返回任何值。所以以下陈述时无效的:
与 C 语言和 Objective-C 不同Swift 的赋值操作并不返回任何值。所以下面语句是无效的:
```swift
if x = y {
@ -46,7 +46,7 @@ if x = y {
}
```
这个特性使你无法把(`==`)错写成(`=`),由于 `if x = y` 是无效的Swift 能帮你避免此类错误发生
通过将 `if x = y` 标记为无效语句Swift 能帮你避免`==`)错写成(`=`)这类错误的出现
<a name="arithmetic_operators"></a>
## 算术运算符
@ -264,12 +264,12 @@ if hasHeader {
第一段代码例子使用了三元运算,所以一行代码就能让我们得到正确答案。这比第二段代码简洁得多,无需将 `rowHeight` 定义成变量,因为它的值无需在 `if` 语句中改变。
三元运算提供有效率且便捷的方式来表达二选一的选择。需要注意的事,过度使用三元运算符会使简洁的代码变的难懂。我们应避免在一个合语句中使用多个三元运算符。
三元运算为二选一场景提供了一个非常便捷的表达形式。不过需要注意的是,滥用三元运算符会降低代码可读性。所以我们应避免在一个合语句中使用多个三元运算符。
<a name="nil_coalescing_operator"></a>
## 空合运算符Nil Coalescing Operator
*空合运算符*`a ?? b`)将对可选类型 `a` 进行空判断,如果 `a` 包含一个值就进行解,否则就返回一个默认值 `b`。表达式 `a` 必须是 Optional 类型。默认值 `b` 的类型必须要和 `a` 存储值的类型保持一致。
*空合运算符*`a ?? b`)将对可选类型 `a` 进行空判断,如果 `a` 包含一个值就进行解,否则就返回一个默认值 `b`。表达式 `a` 必须是 Optional 类型。默认值 `b` 的类型必须要和 `a` 存储值的类型保持一致。
空合运算符是对以下代码的简短表达方法: