Translations for Swift 4.1 (#777)

* Translations for Chapter 3 part 01 for Swift 4.0/4.1

* update chapter 3 part 02 for swift 4.1

* update chapter 3 part 03 for Swift 4.1

* update chapter 1 part 01 for Swift 4.1

* update chapter 1 part 02 for Swift 4.1

* update chapter 1 part 03 for Swift 4.1

* update chapter 2 part 01 for Swift 4.1

* update chapter 2 part 02 for Swift 4.1

* update chapter 2 part 3 for Swift 4.1

* update "summary" and corrected file names

* update chapter 2 part 4 for Swift 4.1

* update chapter 2 part 5 for Swift 4.1

* update chapter 2 part 6 for Swift 4.1

* update chapter 2 parts 06-11 and other parts' errors

* update chapter 2 parts 12-14

* update chapter 2 parts 14-19

* update all chapter 2

* update whole chapter 1

* update some parts of chapter 3
This commit is contained in:
mylittleswift
2018-04-12 01:10:36 -07:00
committed by 安正超
parent 53ac4e8a87
commit ec82cbd6fe
41 changed files with 1177 additions and 641 deletions

View File

@ -18,6 +18,9 @@
> 4.0
> 校对:[kemchenj](https://kemchenj.github.io/) 2017-09-21
> 4.1
> 翻译+校对:[mylittleswift](https://github.com/mylittleswift)
本页包含内容:
- [类和结构体对比](#comparing_classes_and_structures)
@ -31,6 +34,7 @@
与其他编程语言所不同的是Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件。你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口。
> 注意
>
> 通常一个*类*的实例被称为*对象*。然而在 Swift 中,类和结构体的关系要比在其他语言中更加的密切,本章中所讨论的大部分功能都可以用在类和结构体上。因此,我们会主要使用*实例*。
<a name="comparing_classes_and_structures"></a>
@ -40,12 +44,12 @@ Swift 中类和结构体有很多共同点。共同处在于:
* 定义属性用于存储值
* 定义方法用于提供功能
* 定义下标操作使得可以通过下标语法来访问实例所包含的值
* 定义下标操作通过下标语法可以访问它们的值
* 定义构造器用于生成初始化值
* 通过扩展以增加默认实现的功能
* 实现协议以提供某种标准功能
* 遵循协议以提供某种标准功能
更多信息请参见[属性](./10_Properties.html)[方法](./11_Methods.html)[下标](./12_Subscripts.html)[构造过程](./14_Initialization.html)[扩展](./21_Extensions.html),和[协议](./22_Protocols.html)。
更多信息请参见[属性](./10_Properties.html)[方法](./11_Methods.html)[下标](./12_Subscripts.html)[构造过程](./14_Initialization.html)[扩展](./20_Extensions.html),和[协议](./21_Protocols.html)。
与结构体相比,类还有如下的附加功能:
@ -54,9 +58,10 @@ Swift 中类和结构体有很多共同点。共同处在于:
* 析构器允许一个类实例释放任何其所被分配的资源
* 引用计数允许对一个类的多次引用
更多信息请参见[继承](./13_Inheritance.html)[类型转换](./19_Type_Casting.html)[析构过程](./15_Deinitialization.html),和[自动引用计数](./16_Automatic_Reference_Counting.html)。
更多信息请参见[继承](./13_Inheritance.html)[类型转换](./18_Type_Casting.html)[析构过程](./15_Deinitialization.html),和[自动引用计数](./23_Automatic_Reference_Counting.html)。
> 注意
>
> 结构体总是通过被复制的方式在代码中传递,不使用引用计数。
<a name="definition_syntax"></a>
@ -74,6 +79,7 @@ struct SomeStructure {
```
> 注意
>
> 在你每次定义一个新类或者结构体的时候,实际上你是定义了一个新的 Swift 类型。因此请使用`UpperCamelCase`这种方式来命名(如`SomeClass`和`SomeStructure`等),以便符合标准 Swift 类型的大写命名风格(如`String``Int`和`Bool`)。相反的,请使用`lowerCamelCase`这种方式为属性和方法命名(如`framerate`和`incrementCount`),以便和类型名区分。
以下是定义结构体和定义类的示例:
@ -137,6 +143,7 @@ print("The width of someVideoMode is now \(someVideoMode.resolution.width)")
```
> 注意
>
> 与 Objective-C 语言不同的是Swift 允许直接设置结构体属性的子属性。上面的最后一个例子,就是直接设置了`someVideoMode`中`resolution`属性的`width`这个子属性,以上操作并不需要重新为整个`resolution`属性设置新值。
<a name="memberwise_initializers_for_structure_types"></a>
@ -155,7 +162,7 @@ let vga = Resolution(width: 640, height: 480)
*值类型*被赋予给一个变量、常量或者被传递给一个函数的时候,其值会被*拷贝*。
在之前的章节中,我们已经大量使用了值类型。实际上,在 Swift 中所有的基本类型整数Integer、浮点数floating-point、布尔值Boolean、字符串string)、数组array和字典dictionary),都是值类型,并且在底层都是以结构体的形式所实现。
在之前的章节中,我们已经大量使用了值类型。实际上,在 Swift 中所有的基本类型整数Integers、浮点数floating-point numbers、布尔值Booleans、字符串strings)、数组arrays和字典dictionaries),都是值类型,并且在底层都是以结构体的形式所实现。
在 Swift 中,所有的结构体和枚举类型都是值类型。这意味着它们的实例,以及实例中所包含的任何值类型属性,在代码中传递的时候都会被复制。
@ -268,7 +275,7 @@ if tenEighty === alsoTenEighty {
* “等价于”表示两个类类型class type的常量或者变量引用同一个类实例。
* “等于”表示两个实例的值“相等”或“相同”,判定时要遵照设计者定义的评判标准,因此相对于“相等”来说,这是一种更加合适的叫法。
当你在定义你的自定义类和结构体的时候,你有义务来决定判定两个实例“相等”的标准。在章节[等价操作符](./25_Advanced_Operators.html#equivalence_operators)中将会详细介绍实现自定义“等于”和“不等于”运算符的流程。
当你在定义你的自定义类和结构体的时候,你有义务来决定判定两个实例“相等”的标准。在章节[等价操作符](./26_Advanced_Operators.html#equivalence_operators)中将会详细介绍实现自定义“等于”和“不等于”运算符的流程。
<a name="pointers"></a>
### 指针
@ -305,4 +312,5 @@ Swift 中,许多基本类型,诸如`String``Array`和`Dictionary`类型
Objective-C 中`NSString``NSArray``NSDictionary`类型均以类的形式实现,而并非结构体。它们在被赋值或者被传入函数或方法时,不会发生值拷贝,而是传递现有实例的引用。
> 注意
>
> 以上是对字符串、数组、字典的“拷贝”行为的描述。在你的代码中拷贝行为看起来似乎总会发生。然而Swift 在幕后只在绝对必要时才执行实际的拷贝。Swift 管理所有的值拷贝以确保性能最优化,所以你没必要去回避赋值来保证性能最优化。