Skip to content

Commit dbabfdb

Browse files
committed
🐛 中文不换行,避免多余空格的问题
Change-Id: I0c442c1890b573494713c80a8cd23ba127fc1724
1 parent 0a71d51 commit dbabfdb

File tree

2 files changed

+32
-92
lines changed

2 files changed

+32
-92
lines changed

swift-6-beta.docc/GuidedTour/AboutSwift.md

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,9 @@
22

33
理解这门语言的高阶目标。
44

5-
Swift 是为手机、平板电脑、台式机、服务器或任何其他运行代码的设备编写软件的绝佳方式。
6-
它是一种安全且快速的编程语言,结合了现代语言思想的精华,并汲取了来自多元化的开源社区的智慧。
5+
Swift 是为手机、平板电脑、台式机、服务器或任何其他运行代码的设备编写软件的绝佳方式。它是一种安全且快速的编程语言,结合了现代语言思想的精华,并汲取了来自多元化的开源社区的智慧。
76

8-
Swift 对于初学者来说很友好,同时也没有牺牲经验丰富的程序员所需要的强大和灵活性。
9-
它是一种企业级的编程语言,但又有着脚本语言般的表达力和可玩性。
10-
编译器经过精心优化,可以提供卓越的性能表现。同时语言本身也经过精心设计,以便于开发使用。
11-
两者都没有做出任何妥协,鱼与熊掌兼得。
7+
Swift 对于初学者来说很友好,同时也没有牺牲经验丰富的程序员所需要的强大和灵活性。它是一种企业级的编程语言,但又有着脚本语言般的表达力和可玩性。编译器经过精心优化,可以提供卓越的性能表现。同时语言本身也经过精心设计,以便于开发使用。两者都没有做出任何妥协,鱼与熊掌兼得。
128

139
Swift 通过采用现代编程模式来避免大量常见编程错误:
1410

@@ -19,20 +15,11 @@ Swift 通过采用现代编程模式来避免大量常见编程错误:
1915
- 内存被自动管理。
2016
- 错误处理机制使程序能够以可控方式从意外异常中恢复。
2117

22-
Swift 代码经过编译和优化,以充分发挥现代硬件的性能。
23-
其语法和标准库的设计遵循这样的指导思想:
24-
代码的最直观写法也应该具有最佳性能。
25-
Swift 兼具安全性和速度,
26-
使其成为从编写 "Hello, world!" 到开发整个操作系统的绝佳选择。
18+
Swift 代码经过编译和优化,以充分发挥现代硬件的性能。其语法和标准库的设计遵循这样的指导思想:代码的最直观写法也应该具有最佳性能。Swift 兼具安全性和速度,使其成为从编写 "Hello, world!" 到开发整个操作系统的绝佳选择。
2719

28-
Swift 采用了现代化、轻量级的语法,
29-
这些语法对来自其他流行语言的开发者来说很熟悉。
30-
它还具有类型推断和模式匹配等强大功能,能够以清晰简洁的方式表达复杂的概念。
31-
这使得代码更易于阅读、编写和维护。
20+
Swift 采用了现代化、轻量级的语法,这些语法对来自其他流行语言的开发者来说很熟悉。它还具有类型推断和模式匹配等强大功能,能够以清晰简洁的方式表达复杂的概念。这使得代码更易于阅读、编写和维护。
3221

33-
Swift 仍在不断发展,不断推出经过深思熟虑的新特性和强大的功能。
34-
Swift 的目标非常远大。
35-
我们非常期待看到你使用它创造出的作品。
22+
Swift 仍在不断发展,不断推出经过深思熟虑的新特性和强大的功能。Swift 的目标非常远大。我们非常期待看到你使用它创造出的作品。
3623

3724
> 测试版软件:
3825
>

swift-6-beta.docc/LanguageGuide/Extensions.md

Lines changed: 27 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22

33
为现有类型添加功能。
44

5-
**扩展(Extensions)**用于为现有的类、结构体、枚举或协议类型添加新功能。
6-
这包括了扩展那些您无法访问原始源代码的类型的能力(即*追溯建模*)。
7-
扩展和 Objective-C 的分类很相似。
8-
(与 Objective-C 分类不同的是,Swift 扩展是没有名字的。)
5+
**扩展(Extensions)**用于为现有的类、结构体、枚举或协议类型添加新功能。这包括了扩展那些您无法访问原始源代码的类型的能力(即*追溯建模*)。扩展和 Objective-C 的分类很相似。(与 Objective-C 分类不同的是,Swift 扩展是没有名字的。)
96

107
Swift 中的扩展可以:
118

@@ -16,8 +13,7 @@ Swift 中的扩展可以:
1613
- 定义和使用新的嵌套类型
1714
- 使已经存在的类型遵循一个协议
1815

19-
在 Swift 中,你甚至可以扩展协议以提供其需要的实现,或者添加额外功能给遵循的类型所使用。
20-
你可以从 <doc:Protocols#Protocol-Extensions> 获取更多细节。
16+
在 Swift 中,你甚至可以扩展协议以提供其需要的实现,或者添加额外功能给遵循的类型所使用。你可以从 <doc:Protocols#Protocol-Extensions> 获取更多细节。
2117

2218
> 注意:
2319
> 扩展可以给一个类型添加新的功能,但是不能重写已经存在的功能。
@@ -91,8 +87,7 @@ extension SomeType {
9187
```
9288
-->
9389

94-
扩展可以扩充一个现有的类型,给它添加一个或多个协议。
95-
在添加协议的遵循声明时,协议名称的写法和类或者结构体一样:
90+
扩展可以扩充一个现有的类型,给它添加一个或多个协议。在添加协议的遵循声明时,协议名称的写法和类或者结构体一样:
9691

9792
```swift
9893
extension SomeType: SomeProtocol, AnotherProtocol {
@@ -114,19 +109,13 @@ extension SomeType: SomeProtocol, AnotherProtocol {
114109

115110
这种遵循协议的方式在 <doc:Protocols#Adding-Protocol-Conformance-with-an-Extension> 中有描述。
116111

117-
扩展可以使用在现有泛型类型上,就像 <doc:Generics#Extending-a-Generic-Type> 中描述的一样。
118-
你还可以使用扩展给泛型类型有条件地添加功能,
119-
就像 <doc:Generics#Extensions-with-a-Generic-Where-Clause> 中描述的一样。
112+
扩展可以使用在现有泛型类型上,就像 <doc:Generics#Extending-a-Generic-Type> 中描述的一样。你还可以使用扩展给泛型类型有条件地添加功能,就像 <doc:Generics#Extensions-with-a-Generic-Where-Clause> 中描述的一样。
120113

121-
> 注意:
122-
> 对一个现有的类型,如果你定义了一个扩展来添加新的功能,
123-
> 那么这个类型的所有实例都可以使用这个新功能,包括那些在扩展定义之前就存在的实例。
114+
> 注意: 对一个现有的类型,如果你定义了一个扩展来添加新的功能,那么这个类型的所有实例都可以使用这个新功能,包括那些在扩展定义之前就存在的实例。
124115
125116
## 计算属性
126117

127-
扩展可以给现有类型添加计算实例属性和计算类属性。
128-
这个例子给 Swift 内建的 `Double` 类型添加了五个计算型实例属性,
129-
以提供基本的距离单位处理功能:
118+
扩展可以给现有类型添加计算实例属性和计算类属性。这个例子给 Swift 内建的 `Double` 类型添加了五个计算型实例属性,以提供基本的距离单位处理功能:
130119

131120
```swift
132121
extension Double {
@@ -164,22 +153,13 @@ print("Three feet is \(threeFeet) meters")
164153
```
165154
-->
166155

167-
这些计算属性表示一个 `Double` 值应该被视为某种长度单位。
168-
尽管它们是作为计算属性实现的,
169-
但是这些属性的名称可以使用点语法附加到浮点字面量值之后,
170-
作为一种使用该字面量值执行距离转换的方式。
156+
这些计算属性表示一个 `Double` 值应该被视为某种长度单位。尽管它们是作为计算属性实现的,但是这些属性的名称可以使用点语法附加到浮点字面量值之后,作为一种使用该字面量值执行距离转换的方式。
171157

172-
在这个例子中,`Double` 类型的 `1.0` 代表的是“一米”。
173-
这就是为什么计算属性 `m` 返回的是 `self` ——
174-
表达式 `1.m` 被认为是计算一个 `Double` 类型的 `1.0`
158+
在这个例子中,`Double` 类型的 `1.0` 代表的是“一米”。这就是为什么计算属性 `m` 返回的是 `self` ——表达式 `1.m` 被认为是计算一个 `Double` 类型的 `1.0`
175159

176-
其他单位需要进行一些转换,才能表示为以米为单位的值。
177-
一千米等于 1000 米,所以计算属性 `km` 将该值乘以 `1_000.00`
178-
来将其转换为以米为单位的数字。类似地,一米等于 3.28084 英尺,
179-
因此计算属性 `ft` 将底层的 `Double` 值除以 `3.28084` 来将其从英尺转换为米。
160+
其他单位需要进行一些转换,才能表示为以米为单位的值。一千米等于 1000 米,所以计算属性 `km` 将该值乘以 `1_000.00`来将其转换为以米为单位的数字。类似地,一米等于 3.28084 英尺,因此计算属性 `ft` 将底层的 `Double` 值除以 `3.28084` 来将其从英尺转换为米。
180161

181-
这些属性是只读的计算属性,因此为了简便,它们的表达方式省略了 `get` 关键字。
182-
它们的返回值是 `Double` 类型,可以在任何接受 `Double` 的数学计算中使用:
162+
这些属性是只读的计算属性,因此为了简便,它们的表达方式省略了 `get` 关键字。它们的返回值是 `Double` 类型,可以在任何接受 `Double` 的数学计算中使用:
183163

184164
```swift
185165
let aMarathon = 42.km + 195.m
@@ -217,24 +197,15 @@ print("A marathon is \(aMarathon) meters long")
217197

218198
## 构造器
219199

220-
扩展可以为现有类型添加新的构造器。
221-
这使你可以扩展其他类型以接受你自己的自定义类型作为构造器参数,
222-
或提供类型的原始实现中未包含的其他构造选项。
200+
扩展可以为现有类型添加新的构造器。这使你可以扩展其他类型以接受你自己的自定义类型作为构造器参数,或提供类型的原始实现中未包含的其他构造选项。
223201

224-
扩展可以为一个类添加新的便利构造器(convenience initializer),
225-
但是它们不能为一个类添加新的指定构造器(designated initializer)或析构器(deinitializer)。
226-
指定构造器和析构器必须始终由类的原始实现提供。
202+
扩展可以为一个类添加新的便利构造器(convenience initializer),但是它们不能为一个类添加新的指定构造器(designated initializer)或析构器(deinitializer)。指定构造器和析构器必须始终由类的原始实现提供。
227203

228-
如果你使用扩展为一个值类型添加构造器,并且该值类型提供了所有存储属性的默认值,
229-
且没有定义任何自定义构造器,你就可以在扩展的构造器中调用该值类型的默认构造器和成员构造器。
230-
如果你已经将构造器写在该值类型的原始实现中,则不适用于这种情况,
231-
正如 <doc:Initialization#Initializer-Delegation-for-Value-Types> 中所描述的那样。
204+
如果你使用扩展为一个值类型添加构造器,并且该值类型提供了所有存储属性的默认值,且没有定义任何自定义构造器,你就可以在扩展的构造器中调用该值类型的默认构造器和成员构造器。如果你已经将构造器写在该值类型的原始实现中,则不适用于这种情况,正如 <doc:Initialization#Initializer-Delegation-for-Value-Types> 中所描述的那样。
232205

233-
如果你使用扩展为另一个模块中声明的结构体添加构造器,
234-
那么在调用定义模块中的构造器之前,新的构造器是不能访问 `self` 的。
206+
如果你使用扩展为另一个模块中声明的结构体添加构造器,那么在调用定义模块中的构造器之前,新的构造器是不能访问 `self` 的。
235207

236-
以下示例定义了一个自定义的 `Rect` 结构体来表示几何矩形。
237-
该示例还定义了两个辅助结构体 `Size``Point`,它们都为所有属性提供了默认值 `0.0`
208+
以下示例定义了一个自定义的 `Rect` 结构体来表示几何矩形。该示例还定义了两个辅助结构体 `Size``Point`,它们都为所有属性提供了默认值 `0.0`
238209

239210
```swift
240211
struct Size {
@@ -266,9 +237,7 @@ struct Rect {
266237
```
267238
-->
268239

269-
因为 `Rect` 结构体为所有属性都提供了默认值,它会自动获得默认构造器和成员构造器,
270-
<doc:Initialization#Default-Initializers> 中所述。
271-
这些构造器可用于创建新的 `Rect` 实例:
240+
因为 `Rect` 结构体为所有属性都提供了默认值,它会自动获得默认构造器和成员构造器,如 <doc:Initialization#Default-Initializers> 中所述。这些构造器可用于创建新的 `Rect` 实例:
272241

273242
```swift
274243
let defaultRect = Rect()
@@ -312,9 +281,7 @@ extension Rect {
312281
```
313282
-->
314283

315-
这个新的构造器首先根据提供的 `center``size` 计算一个适当的原点。
316-
然后这个构造器调用结构体自带的成员构造器 `init(origin:size:)`
317-
它会将新的 origin 和 size 值储存在相应的属性中:
284+
这个新的构造器首先根据提供的 `center``size` 计算一个适当的原点。然后这个构造器调用结构体自带的成员构造器 `init(origin:size:)`,它会将新的 origin 和 size 值储存在相应的属性中:
318285

319286
```swift
320287
let centerRect = Rect(center: Point(x: 4.0, y: 4.0),
@@ -333,13 +300,11 @@ let centerRect = Rect(center: Point(x: 4.0, y: 4.0),
333300
```
334301
-->
335302

336-
> 注意: 如果你使用扩展提供了一个新的构造器,
337-
> 你仍然需要确保在构造器完成时每个实例都被完全初始化。
303+
> 注意: 如果你使用扩展提供了一个新的构造器,你仍然需要确保在构造器完成时每个实例都被完全初始化。
338304
339305
## 方法
340306

341-
扩展可以为现有类型添加新的实例方法和类方法。
342-
以下示例为 `Int` 类型添加了一个名为 `repetitions` 的新实例方法:
307+
扩展可以为现有类型添加新的实例方法和类方法。以下示例为 `Int` 类型添加了一个名为 `repetitions` 的新实例方法:
343308

344309
```swift
345310
extension Int {
@@ -365,8 +330,7 @@ extension Int {
365330
```
366331
-->
367332

368-
`repetitions(task:)` 方法仅接受一个类型为 `() -> Void` 的参数,
369-
它表示一个没有参数没有返回值的函数。
333+
`repetitions(task:)` 方法仅接受一个类型为 `() -> Void` 的参数,它表示一个没有参数没有返回值的函数。
370334

371335
定义了这个扩展之后,你可以对任意整形数值调用 `repetitions(task:)` 方法,以执行指定次数的任务:
372336

@@ -394,9 +358,7 @@ extension Int {
394358

395359
### 变值实例方法
396360

397-
通过扩展添加的实例方法同样也可以修改(modify)(或 *改变(mutating)*)实例本身。
398-
修改 `self` 或其属性的结构体和枚举方法,必须将实例方法标记为 `mutating`
399-
就像原始实现中的变值方法(mutating methods)一样。
361+
通过扩展添加的实例方法同样也可以修改(modify)(或 *改变(mutating)*)实例本身。修改 `self` 或其属性的结构体和枚举方法,必须将实例方法标记为 `mutating`,就像原始实现中的变值方法(mutating methods)一样。
400362

401363
下面的示例为 Swift 的 `Int` 类型添加了一个新的变值方法 `square`,它可以计算原始值的平方:
402364

@@ -429,9 +391,7 @@ someInt.square()
429391

430392
## 下标
431393

432-
扩展可以为现有类型添加新的下标。
433-
这个示例为 Swift 内置的 `Int` 类型添加了一个整数下标。
434-
下标 `[n]` 返回数字从右边数第 `n` 位的十进制数字:
394+
扩展可以为现有类型添加新的下标。这个示例为 Swift 内置的 `Int` 类型添加了一个整数下标。下标 `[n]` 返回数字从右边数第 `n` 位的十进制数字:
435395

436396
- `123456789[0]` 返回 `9`
437397
- `123456789[1]` 返回 `8`
@@ -501,8 +461,7 @@ extension Int {
501461
Darwin's pow() function is only for floating point.
502462
-->
503463

504-
如果 `Int` 值的数字位数不足以满足所请求的索引,
505-
那么下标实现会返回 `0`,就好像在数字左边补上了 0:
464+
如果 `Int` 值的数字位数不足以满足所请求的索引,那么下标实现会返回 `0`,就好像在数字左边补上了 0:
506465

507466
```swift
508467
746381295[9]
@@ -576,12 +535,9 @@ extension Int {
576535
```
577536
-->
578537

579-
这个例子给 `Int` 添加了一个新的嵌套枚举。
580-
这个枚举叫做 `Kind`,表示特定整数所代表的数字类型。
581-
具体来说,它表示数字是负数、零还是正数。
538+
这个例子给 `Int` 添加了一个新的嵌套枚举。这个枚举叫做 `Kind`,表示特定整数所代表的数字类型。具体来说,它表示数字是负数、零还是正数。
582539

583-
这个例子也给 `Int` 添加了一个新的计算实例属性,叫做 `kind`
584-
它返回被操作整数所对应的 `Kind` 枚举值。
540+
这个例子也给 `Int` 添加了一个新的计算实例属性,叫做 `kind`,它返回被操作整数所对应的 `Kind` 枚举值。
585541

586542
现在,这个嵌套枚举可以用于任何 `Int` 值:
587543

@@ -630,12 +586,9 @@ printIntegerKinds([3, 19, -27, 0, -6, 0, 7])
630586
Workaround for rdar://26016325
631587
-->
632588

633-
这个函数 `printIntegerKinds(_:)` 接受一个 `Int` 值的数组作为输入,并逐个遍历这些值。
634-
对于数组中的每个整数,该函数都会检查它的 `kind` 计算属性,然后打印适当的描述。
589+
这个函数 `printIntegerKinds(_:)` 接受一个 `Int` 值的数组作为输入,并逐个遍历这些值。对于数组中的每个整数,该函数都会检查它的 `kind` 计算属性,然后打印适当的描述。
635590

636-
> 注意: `number.kind` 已经被认为是 `Int.Kind` 类型。
637-
> 所以,在 `switch` 语句中所有的 `Int.Kind` 枚举值可以被缩写,
638-
> 例如使用 `.negative` 替代 `Int.Kind.negative`
591+
> 注意: `number.kind` 已经被认为是 `Int.Kind` 类型。所以,在 `switch` 语句中所有的 `Int.Kind` 枚举值可以被缩写,例如使用 `.negative` 替代 `Int.Kind.negative`
639592
640593
> 测试版软件:
641594
>

0 commit comments

Comments
 (0)