Skip to content

Commit 83500eb

Browse files
committedJul 16, 2020
fix wrong links, fix #1086
1 parent be7dca4 commit 83500eb

23 files changed

+502
-493
lines changed
 

‎source/02_language_guide/01_The_Basics.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,7 @@ print("The status message is \(http200Status.description)")
481481

482482
> 注意
483483
>
484-
> 当遇到一些相关值的简单分组时,元组是很有用的。元组不适合用来创建复杂的数据结构。如果你的数据结构比较复杂,不要使用元组,用类或结构体去建模。欲获得更多信息,请参考 [结构体和类](./09_Classes_and_Structures.md)
484+
> 当遇到一些相关值的简单分组时,元组是很有用的。元组不适合用来创建复杂的数据结构。如果你的数据结构比较复杂,不要使用元组,用类或结构体去建模。欲获得更多信息,请参考 [结构体和类](./09_Structures_And_Classes.md)
485485
486486
## 可选类型 {#optionals}
487487

‎source/02_language_guide/02_Basic_Operators.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ Swift 支持以下的比较运算符:
168168

169169
> 注意
170170
>
171-
> Swift 也提供恒等(`===`)和不恒等(`!==`)这两个比较符来判断两个对象是否引用同一个对象实例。更多细节在 [类与结构](./09_Classes_and_Structures.md) 章节的 **Identity Operators** 部分。
171+
> Swift 也提供恒等(`===`)和不恒等(`!==`)这两个比较符来判断两个对象是否引用同一个对象实例。更多细节在 [类与结构](./09_Structures_And_Classes.md) 章节的 **Identity Operators** 部分。
172172
173173
每个比较运算都返回了一个标识表达式是否成立的布尔值:
174174

‎source/02_language_guide/03_Strings_and_Characters.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ constantString += " and another Highlander"
157157
158158
## 字符串是值类型 {#strings-are-value-types}
159159

160-
在 Swift 中 `String` 类型是*值类型*。如果你创建了一个新的字符串,那么当其进行常量、变量赋值操作,或在函数/方法中传递时,会进行值拷贝。在前述任一情况下,都会对已有字符串值创建新副本,并对该新副本而非原始字符串进行传递或赋值操作。值类型在 [结构体和枚举是值类型](./09_Classes_and_Structures.md#structures-and-enumerations-are-value-types) 中进行了详细描述。
160+
在 Swift 中 `String` 类型是*值类型*。如果你创建了一个新的字符串,那么当其进行常量、变量赋值操作,或在函数/方法中传递时,会进行值拷贝。在前述任一情况下,都会对已有字符串值创建新副本,并对该新副本而非原始字符串进行传递或赋值操作。值类型在 [结构体和枚举是值类型](./09_Structures_And_Classes.md#structures-and-enumerations-are-value-types) 中进行了详细描述。
161161

162162
Swift 默认拷贝字符串的行为保证了在函数/方法向你传递的字符串所属权属于你,无论该值来自于哪里。你可以确信传递的字符串不会被修改,除非你自己去修改它。
163163

‎source/02_language_guide/04_Collection_Types.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ for (index, value) in shoppingList.enumerated() {
235235
// Item 5: Bananas
236236
```
237237

238-
更多关于 `for-in` 循环的介绍请参见 [For 循环](05_Control_Flow.html#for-loops)
238+
更多关于 `for-in` 循环的介绍请参见 [For 循环](./05_Control_Flow.md#for-loops)
239239

240240
## 集合(Sets) {#sets}
241241

‎source/02_language_guide/05_Control_Flow.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,7 @@ default:
527527
- `return`
528528
- `throw`
529529

530-
我们将会在下面讨论 `continue``break``fallthrough` 语句。`return` 语句将会在 [函数](./06_Functions.md) 章节讨论,`throw` 语句会在 [错误抛出](./18_Error_Handling.md#throwing-errors) 章节讨论。
530+
我们将会在下面讨论 `continue``break``fallthrough` 语句。`return` 语句将会在 [函数](./06_Functions.md) 章节讨论,`throw` 语句会在 [错误抛出](./17_Error_Handling.md#throwing-errors) 章节讨论。
531531

532532
### Continue {#continue}
533533

@@ -754,7 +754,7 @@ if #available(iOS 10, macOS 10.12, *) {
754754

755755
以上可用性条件指定,`if` 语句的代码块仅仅在 iOS 10 或 macOS 10.12 及更高版本才运行。最后一个参数,`*`,是必须的,用于指定在所有其它平台中,如果版本号高于你的设备指定的最低版本,if 语句的代码块将会运行。
756756

757-
在它一般的形式中,可用性条件使用了一个平台名字和版本的列表。平台名字可以是 `iOS``macOS``watchOS``tvOS`——请访问 [声明属性](../03_language_reference/06_Attributes.html) 来获取完整列表。除了指定像 iOS 8 或 macOS 10.10 的大版本号,也可以指定像 iOS 11.2.6 以及 macOS 10.13.3 的小版本号。
757+
在它一般的形式中,可用性条件使用了一个平台名字和版本的列表。平台名字可以是 `iOS``macOS``watchOS``tvOS`——请访问 [声明属性](../03_language_reference/07_Attributes.md) 来获取完整列表。除了指定像 iOS 8 或 macOS 10.10 的大版本号,也可以指定像 iOS 11.2.6 以及 macOS 10.13.3 的小版本号。
758758

759759
```swift
760760
if #available(平台名称 版本号, ..., *) {

‎source/02_language_guide/10_Properties.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ print("the volume of fourByFiveByTwo is \(fourByFiveByTwo.volume)")
245245
>
246246
> 在父类初始化方法调用之后,在子类构造器中给父类的属性赋值时,会调用父类属性的 `willSet``didSet` 观察器。而在父类初始化方法调用之前,给子类的属性赋值时不会调用子类属性的观察器。
247247
>
248-
> 有关构造器代理的更多信息,请参考 [值类型的构造器代理](./14_Initialization.md#initializer-delegation-for-value-types)[类的构造器代理](./14-Initialization.md#initializer-delegation-for-class-types)
248+
> 有关构造器代理的更多信息,请参考 [值类型的构造器代理](./14_Initialization.md#initializer-delegation-for-value-types)[类的构造器代理](./14_Initialization.md#initializer-delegation-for-class-types)
249249
250250
下面是一个 `willSet``didSet` 实际运用的例子,其中定义了一个名为 `StepCounter` 的类,用来统计一个人步行时的总步数。这个类可以跟计步器或其他日常锻炼的统计装置的输入数据配合使用。
251251

@@ -284,7 +284,7 @@ stepCounter.totalSteps = 896
284284

285285
> 注意
286286
>
287-
> 如果将带有观察器的属性通过 in-out 方式传入函数,`willSet``didSet` 也会调用。这是因为 in-out 参数采用了拷入拷出内存模式:即在函数内部使用的是参数的 copy,函数结束后,又对参数重新赋值。关于 in-out 参数详细的介绍,请参考 [输入输出参数](../03_language_reference/05_Declarations.html#in-out-parameters)
287+
> 如果将带有观察器的属性通过 in-out 方式传入函数,`willSet``didSet` 也会调用。这是因为 in-out 参数采用了拷入拷出内存模式:即在函数内部使用的是参数的 copy,函数结束后,又对参数重新赋值。关于 in-out 参数详细的介绍,请参考 [输入输出参数](../03_language_reference/06_Declarations.md#in-out-parameters)
288288
289289
## 属性包装器 {#property-wrappers}
290290
属性包装器在管理属性如何存储和定义属性的代码之间添加了一个分隔层。举例来说,如果你的属性需要线程安全性检查或者需要在数据库中存储它们的基本数据,那么必须给每个属性添加同样的逻辑代码。当使用属性包装器时,你只需在定义属性包装器时编写一次管理代码,然后应用到多个属性上来进行复用。
@@ -306,7 +306,7 @@ struct TwelveOrLess {
306306
这个 setter 确保新值小于 12,而且返回被存储的值。
307307
> 注意
308308
>
309-
> 上面例子以 `private` 的方式声明 `number` 变量,这使得 `number` 仅在 `TwelveOrLess` 的实现中使用。写在其他地方的代码通过使用 `wrappedValue` 的 getter 和 setter 来获取这个值,但不能直接使用 `number`。有关 `private` 的更多信息,请参考 [访问控制](./25_Access_Control.md)
309+
> 上面例子以 `private` 的方式声明 `number` 变量,这使得 `number` 仅在 `TwelveOrLess` 的实现中使用。写在其他地方的代码通过使用 `wrappedValue` 的 getter 和 setter 来获取这个值,但不能直接使用 `number`。有关 `private` 的更多信息,请参考 [访问控制](./26_Access_Control.md)
310310
311311
通过在属性之前写上包装器名称作为特性的方式,你可以把一个包装器应用到一个属性上去。这里有个存储小矩形的结构体。通过 `TwelveOrLess` 属性包装器实现类似(挺随意的)对“小”的定义。
312312

‎source/02_language_guide/11_Methods.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ struct LevelTracker {
213213

214214
除了类型属性和类型方法,`LevelTracker` 还监测每个玩家的进度。它用实例属性 `currentLevel` 来监测每个玩家当前的等级。
215215

216-
为了便于管理 `currentLevel` 属性,`LevelTracker` 定义了实例方法 `advance(to:)`。这个方法会在更新 `currentLevel` 之前检查所请求的新等级是否已经解锁。`advance(to:)` 方法返回布尔值以指示是否能够设置 `currentLevel`。因为允许在调用 `advance(to:)` 时候忽略返回值,不会产生编译警告,所以函数被标注为 `@discardableResult` 属性,更多关于属性信息,请参考 [特性](../03_language_reference/07_Attributes.html) 章节。
216+
为了便于管理 `currentLevel` 属性,`LevelTracker` 定义了实例方法 `advance(to:)`。这个方法会在更新 `currentLevel` 之前检查所请求的新等级是否已经解锁。`advance(to:)` 方法返回布尔值以指示是否能够设置 `currentLevel`。因为允许在调用 `advance(to:)` 时候忽略返回值,不会产生编译警告,所以函数被标注为 `@discardableResult` 属性,更多关于属性信息,请参考 [特性](../03_language_reference/07_Attributes.md) 章节。
217217

218218
下面,`Player` 类使用 `LevelTracker` 来监测和更新每个玩家的发展进度:
219219

‎source/02_language_guide/14_Initialization.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ let centerRect = Rect(center: Point(x: 4.0, y: 4.0),
328328

329329
> 注意
330330
>
331-
> 如果你想用另外一种不需要自己定义 `init()``init(origin:size:)` 的方式来实现这个例子,请参考 [扩展](./21_Extensions.md)
331+
> 如果你想用另外一种不需要自己定义 `init()``init(origin:size:)` 的方式来实现这个例子,请参考 [扩展](./20_Extensions.md)
332332
333333
## 类的继承和构造过程 {#class-inheritance-and-initialization}
334334

‎source/02_language_guide/17_Error_Handling.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ do {
149149
}
150150
```
151151

152-
`catch` 后面写一个匹配模式来表明这个子句能处理什么样的错误。如果一条 `catch` 子句没有指定匹配模式,那么这条子句可以匹配任何错误,并且把错误绑定到一个名字为 `error` 的局部常量。关于模式匹配的更多信息请参考 [模式](../03_language_reference/07_Patterns.html)
152+
`catch` 后面写一个匹配模式来表明这个子句能处理什么样的错误。如果一条 `catch` 子句没有指定匹配模式,那么这条子句可以匹配任何错误,并且把错误绑定到一个名字为 `error` 的局部常量。关于模式匹配的更多信息请参考 [模式](../03_language_reference/08_Patterns.md)
153153

154154
举例来说,下面的代码处理了 `VendingMachineError` 枚举类型的全部三种情况:
155155

@@ -175,7 +175,7 @@ do {
175175

176176
`catch` 子句不必将 `do` 子句中的代码所抛出的每一个可能的错误都作处理。如果所有 `catch` 子句都未处理错误,错误就会传递到周围的作用域。然而,错误还是必须要被某个周围的作用域处理的。在不会抛出错误的函数中,必须用 `do-catch` 语句处理错误。而能够抛出错误的函数既可以使用 `do-catch` 语句处理,也可以让调用方来处理错误。如果错误传递到了顶层作用域却依然没有被处理,你会得到一个运行时错误。
177177

178-
以下面的代码为例,不是 `VendingMachineError` 中申明的错误会在调用函数的地方被捕获
178+
以下面的代码为例,不是 `VendingMachineError` 中声明的错误会在调用函数的地方被捕获
179179

180180
```swift
181181
func nourish(with item: String) throws {

‎source/02_language_guide/21_Protocols.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,7 @@ protocol SomeClassOnlyProtocol: AnyObject, SomeInheritedProtocol {
644644

645645
> 注意
646646
>
647-
> 当协议定义的要求需要遵循协议的类型必须是引用语义而非值语义时,应该采用类类型专属协议。关于引用语义和值语义的更多内容,请查看 [结构体和枚举是值类型](./09_Classes_and_Structures.md#structures-and-enumerations-are-value-types)[类是引用类型](./09-Classes-and-Structures.md#classes-are-reference-types)
647+
> 当协议定义的要求需要遵循协议的类型必须是引用语义而非值语义时,应该采用类类型专属协议。关于引用语义和值语义的更多内容,请查看 [结构体和枚举是值类型](./09_Structures_And_Classes.md#structures-and-enumerations-are-value-types)[类是引用类型](./09_Structures_And_Classes.md#classes-are-reference-types)
648648
649649
## 协议合成 {#protocol-composition}
650650

@@ -828,7 +828,7 @@ class Counter {
828828

829829
这里使用了两层可选链式调用。首先,由于 `dataSource` 可能为 `nil`,因此在 `dataSource` 后边加上了 `?`,以此表明只在 `dataSource` 非空时才去调用 `increment(forCount:)` 方法。其次,即使 `dataSource` 存在,也无法保证其是否实现了 `increment(forCount:)` 方法,因为这个方法是可选的。因此,`increment(forCount:)` 方法同样使用可选链式调用进行调用,只有在该方法被实现的情况下才能调用它,所以在 `increment(forCount:)` 方法后边也加上了 `?`
830830

831-
调用 `increment(forCount:)` 方法在上述两种情形下都有可能失败,所以返回值为 `Int?` 类型。虽然在 `CounterDataSource` 协议中,`increment(forCount:)` 的返回值类型是非可选 `Int`。另外,即使这里使用了两层可选链式调用,最后的返回结果依旧是单层的可选类型。关于这一点的更多信息,请查阅 [连接多层可选链式调用](./16_Optional_Chaining)
831+
调用 `increment(forCount:)` 方法在上述两种情形下都有可能失败,所以返回值为 `Int?` 类型。虽然在 `CounterDataSource` 协议中,`increment(forCount:)` 的返回值类型是非可选 `Int`。另外,即使这里使用了两层可选链式调用,最后的返回结果依旧是单层的可选类型。关于这一点的更多信息,请查阅 [连接多层可选链式调用](./16_Optional_Chaining.md)
832832

833833
在调用 `increment(forCount:)` 方法后,`Int?` 型的返回值通过可选绑定解包并赋值给常量 `amount`。如果可选值确实包含一个数值,也就是说,数据源和方法都存在,数据源方法返回了一个有效值。之后便将解包后的 `amount` 加到 `count` 上,增量操作完成。
834834

‎source/02_language_guide/24_Automatic_Reference_Counting.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -558,4 +558,4 @@ paragraph = nil
558558
// 打印“p is being deinitialized”
559559
```
560560

561-
你可以查看 [捕获列表](../03_language_reference/04_Expressions.html) 章节,获取更多关于捕获列表的信息。
561+
你可以查看 [捕获列表](../03_language_reference/04_Expressions.md) 章节,获取更多关于捕获列表的信息。

‎source/02_language_guide/27_Advanced_Operators.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ let plusMinusVector = firstVector +- secondVector
438438
// plusMinusVector 是一个 Vector2D 实例,并且它的值为 (4.0, -2.0)
439439
```
440440

441-
这个运算符把两个向量的 `x` 值相加,同时从第一个向量的 `y` 中减去第二个向量的 `y` 。因为它本质上是属于“相加型”运算符,所以将它放置在 `+``-` 等默认中缀“相加型”运算符相同的优先级组中。关于 Swift 标准库提供的运算符,以及完整的运算符优先级组和结合性设置,请参考 [运算符声明](https://developer.apple.com/documentation/swift/operator_declarations)。而更多关于优先级组以及自定义操作符和优先级组的语法,请参考 [运算符声明](./06_Declarations.md#operator-declaration)
441+
这个运算符把两个向量的 `x` 值相加,同时从第一个向量的 `y` 中减去第二个向量的 `y` 。因为它本质上是属于“相加型”运算符,所以将它放置在 `+``-` 等默认中缀“相加型”运算符相同的优先级组中。关于 Swift 标准库提供的运算符,以及完整的运算符优先级组和结合性设置,请参考 [运算符声明](https://developer.apple.com/documentation/swift/operator_declarations)。而更多关于优先级组以及自定义操作符和优先级组的语法,请参考 [运算符声明](../03_language_reference/06_Declarations.md#operator-declaration)
442442

443443
> 注意
444444
>

‎source/03_language_reference/01_About_the_Language_Reference.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ Swift 语言相对较小,这是由于 Swift 代码中常用的类型、函数
1919

2020
> getter-setter 方法块语法
2121
>
22-
> *getter-setter 方法块* → { [getter 子句](./06_Declarations.md#getter-clause) [setter 子句](./06-Declarations.md#setter-clause)<sub>可选</sub> } | { [setter 子句](./06-Declarations.md#setter-clause) [getter 子句](./06-Declarations.md#getter-clause) }
22+
> *getter-setter 方法块* → { [getter 子句](./06_Declarations.md#getter-clause) [setter 子句](./06_Declarations.md#setter-clause)<sub>可选</sub> } | { [setter 子句](./06_Declarations.md#setter-clause) [getter 子句](./06_Declarations.md#getter-clause) }
2323
2424
这个定义表明,一个 getter-setter 方法块可以由一个 getter 分句后跟一个可选的 setter 分句构成,然后用大括号括起来,或者由一个 setter 分句后跟一个 getter 分句构成,然后用大括号括起来。上述的语法产式等价于下面的两个语法产式, :
2525

2626
> getter-setter 方法块语法
2727
>
28-
> getter-setter 方法块 → { [getter 子句](./06_Declarations.md#getter-clause) [setter 子句](./06-Declarations.md#setter-clause)<sub>可选</sub> }
28+
> getter-setter 方法块 → { [getter 子句](./06_Declarations.md#getter-clause) [setter 子句](./06_Declarations.md#setter-clause)<sub>可选</sub> }
2929
>
30-
> getter-setter 方法块 → { [setter 子句](./06_Declarations.md#setter-clause) [getter 子句](./06-Declarations.md#getter-clause) }
30+
> getter-setter 方法块 → { [setter 子句](./06_Declarations.md#setter-clause) [getter 子句](./06_Declarations.md#getter-clause) }
3131
>
3232

0 commit comments

Comments
 (0)
Please sign in to comment.