修正标点与空格错误 (#851)
* 修正 source/chapter2/04_Collection_Types.md 错误的空格与标点 * 修正 source/chapter2/05_Control_Flow.md 错误的空格与标点使用 * 修正 source/chapter2/06_Functions.md 去除多余空格
This commit is contained in:
@ -234,7 +234,7 @@ for item in shoppingList {
|
|||||||
如果我们同时需要每个数据项的值和索引值,可以使用 `enumerated()` 方法来进行数组遍历。`enumerated()` 返回一个由每一个数据项索引值和数据值组成的元组。我们可以把这个元组分解成临时常量或者变量来进行遍历:
|
如果我们同时需要每个数据项的值和索引值,可以使用 `enumerated()` 方法来进行数组遍历。`enumerated()` 返回一个由每一个数据项索引值和数据值组成的元组。我们可以把这个元组分解成临时常量或者变量来进行遍历:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
for (index, value) in shoppingList. enumerated() {
|
for (index, value) in shoppingList.enumerated() {
|
||||||
print("Item \(String(index + 1)): \(value)")
|
print("Item \(String(index + 1)): \(value)")
|
||||||
}
|
}
|
||||||
// Item 1: Six eggs
|
// Item 1: Six eggs
|
||||||
@ -259,9 +259,9 @@ for (index, value) in shoppingList. enumerated() {
|
|||||||
<a name="hash_values_for_set_types"></a>
|
<a name="hash_values_for_set_types"></a>
|
||||||
### 集合类型的哈希值
|
### 集合类型的哈希值
|
||||||
|
|
||||||
一个类型为了存储在集合中,该类型必须是*可哈希化*的--也就是说,该类型必须提供一个方法来计算它的*哈希值*。一个哈希值是 `Int` 类型的,相等的对象哈希值必须相同,比如 `a==b`,因此必须 `a.hashValue == b.hashValue`。
|
一个类型为了存储在集合中,该类型必须是*可哈希化*的——也就是说,该类型必须提供一个方法来计算它的*哈希值*。一个哈希值是 `Int` 类型的,相等的对象哈希值必须相同,比如 `a==b`,因此必须 `a.hashValue == b.hashValue`。
|
||||||
|
|
||||||
Swift 的所有基本类型(比如 `String`,`Int`,`Double` 和 `Bool`)默认都是可哈希化的,可以作为集合的值的类型或者字典的键的类型。没有关联值的枚举成员值(在[枚举](./08_Enumerations.html)有讲述)默认也是可哈希化的。
|
Swift 的所有基本类型(比如 `String`、`Int`、`Double` 和 `Bool`)默认都是可哈希化的,可以作为集合的值的类型或者字典的键的类型。没有关联值的枚举成员值(在[枚举](./08_Enumerations.html)有讲述)默认也是可哈希化的。
|
||||||
|
|
||||||
> 注意
|
> 注意
|
||||||
>
|
>
|
||||||
@ -301,7 +301,7 @@ print("letters is of type Set<Character> with \(letters.count) items.")
|
|||||||
letters.insert("a")
|
letters.insert("a")
|
||||||
// letters 现在含有1个 Character 类型的值
|
// letters 现在含有1个 Character 类型的值
|
||||||
letters = []
|
letters = []
|
||||||
// letters 现在是一个空的 Set, 但是它依然是 Set<Character> 类型
|
// letters 现在是一个空的 Set,但是它依然是 Set<Character> 类型
|
||||||
```
|
```
|
||||||
|
|
||||||
<a name="creating_a_set_with_an_array_literal"></a>
|
<a name="creating_a_set_with_an_array_literal"></a>
|
||||||
@ -417,7 +417,7 @@ for genre in favoriteGenres.sorted() {
|
|||||||
<a name="fundamental_set_operations"></a>
|
<a name="fundamental_set_operations"></a>
|
||||||
### 基本集合操作
|
### 基本集合操作
|
||||||
|
|
||||||
下面的插图描述了两个集合-`a` 和 `b`-以及通过阴影部分的区域显示集合各种操作的结果。
|
下面的插图描述了两个集合 `a` 和 `b`,以及通过阴影部分的区域显示集合各种操作的结果。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@ -433,18 +433,18 @@ let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]
|
|||||||
|
|
||||||
oddDigits.union(evenDigits).sorted()
|
oddDigits.union(evenDigits).sorted()
|
||||||
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||||
oddDigits. intersection(evenDigits).sorted()
|
oddDigits.intersection(evenDigits).sorted()
|
||||||
// []
|
// []
|
||||||
oddDigits.subtracting(singleDigitPrimeNumbers).sorted()
|
oddDigits.subtracting(singleDigitPrimeNumbers).sorted()
|
||||||
// [1, 9]
|
// [1, 9]
|
||||||
oddDigits. symmetricDifference(singleDigitPrimeNumbers).sorted()
|
oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted()
|
||||||
// [1, 2, 9]
|
// [1, 2, 9]
|
||||||
```
|
```
|
||||||
|
|
||||||
<a name="set_membership_and_equality"></a>
|
<a name="set_membership_and_equality"></a>
|
||||||
### 集合成员关系和相等
|
### 集合成员关系和相等
|
||||||
|
|
||||||
下面的插图描述了三个集合-`a`,`b` 和 `c`,以及通过重叠区域表述集合间共享的元素。集合 `a` 是集合 `b` 的父集合,因为 `a` 包含了 `b` 中所有的元素,相反的,集合 `b` 是集合 `a` 的子集合,因为属于 `b` 的元素也被 `a` 包含。集合 `b` 和集合 `c` 彼此不关联,因为它们之间没有共同的元素。
|
下面的插图描述了三个集合 `a`、`b` 和 `c`,以及通过重叠区域表述集合间共享的元素。集合 `a` 是集合 `b` 的父集合,因为 `a` 包含了 `b` 中所有的元素,相反的,集合 `b` 是集合 `a` 的子集合,因为属于 `b` 的元素也被 `a` 包含。集合 `b` 和集合 `c` 彼此不关联,因为它们之间没有共同的元素。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@ -619,7 +619,7 @@ airports["APL"] = nil
|
|||||||
此外,`removeValue(forKey:)` 方法也可以用来在字典中移除键值对。这个方法在键值对存在的情况下会移除该键值对并且返回被移除的值或者在没有值的情况下返回 `nil`:
|
此外,`removeValue(forKey:)` 方法也可以用来在字典中移除键值对。这个方法在键值对存在的情况下会移除该键值对并且返回被移除的值或者在没有值的情况下返回 `nil`:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
if let removedValue = airports. removeValue(forKey: "DUB") {
|
if let removedValue = airports.removeValue(forKey: "DUB") {
|
||||||
print("The removed airport's name is \(removedValue).")
|
print("The removed airport's name is \(removedValue).")
|
||||||
} else {
|
} else {
|
||||||
print("The airports dictionary does not contain a value for DUB.")
|
print("The airports dictionary does not contain a value for DUB.")
|
||||||
|
|||||||
@ -79,7 +79,7 @@ for tickMark in 0..<minutes {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
一些用户可能在其 UI 中可能需要较少的刻度。他们可以每5分钟作为一个刻度。使用 `stride(from:to:by:)` 函数跳过不需要的标记。
|
一些用户可能在其 UI 中可能需要较少的刻度。他们可以每 5 分钟作为一个刻度。使用 `stride(from:to:by:)` 函数跳过不需要的标记。
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
let minuteInterval = 5
|
let minuteInterval = 5
|
||||||
@ -525,11 +525,10 @@ case (let distance, 0), (0, let distance):
|
|||||||
default:
|
default:
|
||||||
print("Not on an axis")
|
print("Not on an axis")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 输出 "On an axis, 9 from the origin"
|
// 输出 "On an axis, 9 from the origin"
|
||||||
```
|
```
|
||||||
|
|
||||||
上面的 case 有两个模式:`(let distance, 0)` 匹配了在 x 轴上的值,`(0, let distance)` 匹配了在 y 轴上的值。两个模式都绑定了 `distance`,并且 `distance` 在两种模式下,都是整型——这意味着分支体内的代码,只要 case 匹配,都可以获取到 `distance` 值
|
上面的 case 有两个模式:`(let distance, 0)` 匹配了在 x 轴上的值,`(0, let distance)` 匹配了在 y 轴上的值。两个模式都绑定了 `distance`,并且 `distance` 在两种模式下,都是整型——这意味着分支体内的代码,只要 case 匹配,都可以获取到 `distance` 值。
|
||||||
|
|
||||||
<a name="control_transfer_statements"></a>
|
<a name="control_transfer_statements"></a>
|
||||||
## 控制转移语句
|
## 控制转移语句
|
||||||
@ -750,7 +749,7 @@ greet(["name": "Jane", "location": "Cupertino"])
|
|||||||
|
|
||||||
如果 `guard` 语句的条件被满足,则继续执行 `guard` 语句大括号后的代码。将变量或者常量的可选绑定作为 `guard` 语句的条件,都可以保护 `guard` 语句后面的代码。
|
如果 `guard` 语句的条件被满足,则继续执行 `guard` 语句大括号后的代码。将变量或者常量的可选绑定作为 `guard` 语句的条件,都可以保护 `guard` 语句后面的代码。
|
||||||
|
|
||||||
如果条件不被满足,在 `else` 分支上的代码就会被执行。这个分支必须转移控制以退出 `guard` 语句出现的代码段。它可以用控制转移语句如 `return`,`break`,`continue` 或者 `throw` 做这件事,或者调用一个不返回的方法或函数,例如 `fatalError()`。
|
如果条件不被满足,在 `else` 分支上的代码就会被执行。这个分支必须转移控制以退出 `guard` 语句出现的代码段。它可以用控制转移语句如 `return`、`break`、`continue` 或者 `throw` 做这件事,或者调用一个不返回的方法或函数,例如 `fatalError()`。
|
||||||
|
|
||||||
相比于可以实现同样功能的 `if` 语句,按需使用 `guard` 语句会提升我们代码的可读性。它可以使你的代码连贯的被执行而不需要将它包在 `else` 块中,它可以使你在紧邻条件判断的地方,处理违规的情况。
|
相比于可以实现同样功能的 `if` 语句,按需使用 `guard` 语句会提升我们代码的可读性。它可以使你的代码连贯的被执行而不需要将它包在 `else` 块中,它可以使你在紧邻条件判断的地方,处理违规的情况。
|
||||||
|
|
||||||
|
|||||||
@ -37,7 +37,7 @@ print(greet(person: "Brian"))
|
|||||||
|
|
||||||
> 注意
|
> 注意
|
||||||
>
|
>
|
||||||
> `print(_:separator:terminator:)` 函数的第一个参数并没有设置一个标签,而其他的参数因为已经有了默认值,因此是可选的。关于这些函数语法上的变化详见下方关于 函数参数标签和参数名 以及 默认参数值。
|
> `print(_:separator:terminator:)` 函数的第一个参数并没有设置一个标签,而其他的参数因为已经有了默认值,因此是可选的。关于这些函数语法上的变化详见下方关于 函数参数标签和参数名以及默认参数值。
|
||||||
|
|
||||||
在 `greet(person:)` 的函数体中,先定义了一个新的名为 `greeting` 的 `String` 常量,同时,把对 `personName` 的问候消息赋值给了 `greeting` 。然后用 `return` 关键字把这个问候返回出去。一旦 `return greeting` 被调用,该函数结束它的执行并返回 `greeting` 的当前值。
|
在 `greet(person:)` 的函数体中,先定义了一个新的名为 `greeting` 的 `String` 常量,同时,把对 `personName` 的问候消息赋值给了 `greeting` 。然后用 `return` 关键字把这个问候返回出去。一旦 `return greeting` 被调用,该函数结束它的执行并返回 `greeting` 的当前值。
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user