From 9da5252f5fcfd3b2297181ee86be429c767afb5d Mon Sep 17 00:00:00 2001 From: windorz9 <1925449823@qq.com> Date: Thu, 30 Mar 2023 20:37:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=BC=E5=BC=8F,=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AF=AD=E7=97=85,=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=BF=BB=E8=AF=91=20(#1228)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 修复格式错误, 文本缩进与内容斜体 * 修改语病与错别字 * 优化翻译 --- source/02_language_guide/15_Deinitialization.md | 2 +- source/02_language_guide/20_Extensions.md | 4 ++-- source/02_language_guide/21_Protocols.md | 6 +++--- source/02_language_guide/28_Concurrency.md | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/source/02_language_guide/15_Deinitialization.md b/source/02_language_guide/15_Deinitialization.md index bbeab2c5..8512eef6 100755 --- a/source/02_language_guide/15_Deinitialization.md +++ b/source/02_language_guide/15_Deinitialization.md @@ -16,7 +16,7 @@ deinit { 析构器是在实例释放发生前被自动调用的。你不能主动调用析构器。子类继承了父类的析构器,并且在子类析构器实现的最后,父类的析构器会被自动调用。即使子类没有提供自己的析构器,父类的析构器也同样会被调用。 -因为直到实例的析构器被调用后,实例才会被释放,所以析构器可以访问实例的所有属性,并且可以根据那些属性可以修改它的行为(比如查找一个需要被关闭的文件)。 +因为直到实例的析构器被调用后,实例才会被释放,所以析构器可以访问实例的所有属性,并且可以根据那些属性修改它的行为(比如查找一个需要被关闭的文件)。 ## 析构器实践 {#deinitializers-in-action} diff --git a/source/02_language_guide/20_Extensions.md b/source/02_language_guide/20_Extensions.md index a9e5d6fe..b145ae88 100644 --- a/source/02_language_guide/20_Extensions.md +++ b/source/02_language_guide/20_Extensions.md @@ -37,7 +37,7 @@ extension SomeType: SomeProtocol, AnotherProtocol { 这种遵循协议的方式在 [在扩展里添加协议遵循](./21_Protocols.md#adding-protocol-conformance-with-an-extension) 中有描述。 -扩展可以使用在现有范型类型上,就像 [泛型扩展](./22_Generics.md#extending-a-generic-type) 中描述的一样。你还可以使用扩展给泛型类型有条件的添加功能,就像 [具有泛型 Where 子句的扩展](./22_Generics.md#extensions-with-a-generic-where-clause) 中描述的一样。 +扩展可以使用在现有泛型类型上,就像 [泛型扩展](./22_Generics.md#extending-a-generic-type) 中描述的一样。你还可以使用扩展给泛型类型有条件的添加功能,就像 [具有泛型 Where 子句的扩展](./22_Generics.md#extensions-with-a-generic-where-clause) 中描述的一样。 > 注意 > @@ -210,7 +210,7 @@ extension Int { // 返回 7 ``` -如果操作的 `Int` 值没有足够的位数满足所请求的下标,那么下标的现实将返回 `0`,将好像在数字的左边补上了 0: +如果操作的 `Int` 值没有足够的位数满足所请求的下标,那么下标的实现将返回 `0`,就好像在数字的左边补上了 0: ```swift 746381295[9] diff --git a/source/02_language_guide/21_Protocols.md b/source/02_language_guide/21_Protocols.md index 770542a6..80483be0 100644 --- a/source/02_language_guide/21_Protocols.md +++ b/source/02_language_guide/21_Protocols.md @@ -105,7 +105,7 @@ var ncc1701 = Starship(name: "Enterprise", prefix: "USS") ```swift protocol SomeProtocol { - static func someTypeMethod() + static func someTypeMethod() } ``` @@ -675,7 +675,7 @@ wishHappyBirthday(to: birthdayPerson) `Named` 协议包含 `String` 类型的 `name` 属性。`Aged` 协议包含 `Int` 类型的 `age` 属性。`Person` 结构体采纳了这两个协议。 -`wishHappyBirthday(to:)` 函数的参数 `celebrator` 的类型为 `Named & Aged`, 这意味着“任何同时遵循 Named 和 Aged 的协议”。它不关心参数的具体类型,只要参数遵循这两个协议即可。 +`wishHappyBirthday(to:)` 函数的参数 `celebrator` 的类型为 `Named & Aged`, 这意味着“任何同时遵循 Named 和 Aged 协议的类型”。它不关心参数的具体类型,只要参数遵循这两个协议即可。 上面的例子创建了一个名为 `birthdayPerson` 的 `Person` 的实例,作为参数传递给了 `wishHappyBirthday(to:)` 函数。因为 `Person` 同时遵循这两个协议,所以这个参数合法,函数将打印生日问候语。 @@ -857,7 +857,7 @@ for _ in 1...4 { // 12 ``` -上述代码新建了一个 `Counter` 实例,并将它的数据源设置为一个 `ThreeSource` 的实例,然后调用 `increment()` 方法 `4` 次。按照预期预期一样,每次调用都会将 `count` 的值增加 `3`. +上述代码新建了一个 `Counter` 实例,并将它的数据源设置为一个 `ThreeSource` 的实例,然后调用 `increment()` 方法 `4` 次。正如预期一样,每次调用都会将 `count` 的值增加 `3`. 下面是一个更为复杂的数据源 `TowardsZeroSource`,它将使得最后的值变为 `0`: diff --git a/source/02_language_guide/28_Concurrency.md b/source/02_language_guide/28_Concurrency.md index 21efafb7..9ab5dac4 100644 --- a/source/02_language_guide/28_Concurrency.md +++ b/source/02_language_guide/28_Concurrency.md @@ -114,7 +114,7 @@ for try await line in handle.bytes.lines { } ``` -与普通的 `for-in` 循环相比,上面的列子在 `for` 之后添加了 `await` 关键字。就像在调用异步函数或方法时一样,`await` 表明代码中有一个可能的悬点。`for-await-in` 循环会在每次循环开始的时候因为有可能需要等待下一个元素而挂起当前代码的执行。 +与普通的 `for-in` 循环相比,上面的例子在 `for` 之后添加了 `await` 关键字。就像在调用异步函数或方法时一样,`await` 表明代码中有一个可能的悬点。`for-await-in` 循环会在每次循环开始的时候因为有可能需要等待下一个元素而挂起当前代码的执行。 想让自己创建的类型使用 `for-in` 循环需要遵循 [Sequence](https://developer.apple.com/documentation/swift/sequence) 协议,这里也同理,如果想让自己创建的类型使用 `for-await-in` 循环,就需要遵循 [AsyncSequence](https://developer.apple.com/documentation/swift/asyncsequence) 协议。 @@ -157,7 +157,7 @@ show(photos) ## 任务和任务组 {#Tasks-and-Task-Groups} -*任务(task)*是一项工作,可以作为程序的一部分并发执行。所有的异步代码都属于某个任务。上一部分介绍的 `async-let` 语法就会产生一个子任务。你也可以创建一个任务组并且给其中添加子任务,这可以让你对优先级和任务取消有了更多的掌控力,并且可以控制任务的数量。 +*任务(task)* 是一项工作,可以作为程序的一部分并发执行。所有的异步代码都属于某个任务。上一部分介绍的 `async-let` 语法就会产生一个子任务。你也可以创建一个任务组并且给其中添加子任务,这可以让你对优先级和任务取消有了更多的掌控力,并且可以控制任务的数量。 任务是按层级结构排列的。同一个任务组中的任务拥有相同的父任务,并且每个任务都可以添加子任务。由于任务和任务组之间明确的关系,这种方式又被称为*结构化并发(structured concurrency)*。虽然你需要确保代码的正确性,但任务间明确的父子关系让 Swift 能替你处理一些如扩散取消(propagating cancellation)之类的行为,并且能让 Swift 在编译阶段发现一些错误。