Skip to content

Commit a516af6

Browse files
committedJun 14, 2014
fix 他
1 parent 1c10a65 commit a516af6

12 files changed

+36
-36
lines changed
 

‎source/chapter1/01_swift.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# 关于 Swift
66
-----------------
77

8-
Swift 是一种新的编程语言,用于编写 iOS 和 OS X 应用。Swift 结合了 C 和 Objective-C 的优点并且不受 C 兼容性的限制。Swift 采用安全的编程模式并添加了很多新特性,这将使编程更简单,更灵活,也更有趣。Swift 是基于成熟而且倍受喜爱的 Cocoa 和 Cocoa Touch 框架,他的降临将重新定义软件开发
8+
Swift 是一种新的编程语言,用于编写 iOS 和 OS X 应用。Swift 结合了 C 和 Objective-C 的优点并且不受 C 兼容性的限制。Swift 采用安全的编程模式并添加了很多新特性,这将使编程更简单,更灵活,也更有趣。Swift 是基于成熟而且倍受喜爱的 Cocoa 和 Cocoa Touch 框架,它的降临将重新定义软件开发
99

1010
Swift 的开发从很久之前就开始了。为了给 Swift 打好基础,苹果公司改进了编译器,调试器和框架结构。我们使用自动引用计数(Automatic Reference Counting, ARC)来简化内存管理。我们在 Foundation 和 Cocoa 的基础上构建框架栈并将其标准化。Objective-C 本身支持块、集合语法和模块,所以框架可以轻松支持现代编程语言技术。正是得益于这些基础工作,我们现在才能发布这样一个用于未来苹果软件开发的新语言。
1111

‎source/chapter2/03_Strings_and_Characters.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ print("\n")
364364
// 68 111 103 33 240 159 144 182
365365
```
366366

367-
上面的例子中,前四个10进制代码单元值 (68, 111, 103, 33) 代表了字符`D` `o` `g``!`他们的 UTF-8 表示与 ASCII 表示相同。
367+
上面的例子中,前四个10进制代码单元值 (68, 111, 103, 33) 代表了字符`D` `o` `g``!`它们的 UTF-8 表示与 ASCII 表示相同。
368368
后四个代码单元值 (240, 159, 144, 182) 是`DOG FACE`的4字节 UTF-8 表示。
369369

370370
<a name="UTF-16"></a>
@@ -381,7 +381,7 @@ print("\n")
381381
// 68 111 103 33 55357 56374
382382
```
383383

384-
同样,前四个代码单元值 (68, 111, 103, 33) 代表了字符`D` `o` `g``!`他们的 UTF-16 代码单元和 UTF-8 完全相同。
384+
同样,前四个代码单元值 (68, 111, 103, 33) 代表了字符`D` `o` `g``!`它们的 UTF-16 代码单元和 UTF-8 完全相同。
385385

386386
第五和第六个代码单元值 (55357 和 56374) 是`DOG FACE`字符的UTF-16 表示。
387387
第一个值为`U+D83D`(十进制值为 55357),第二个值为`U+DC36`(十进制值为 56374)。

‎source/chapter2/07_Closures.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ let digitNames = [
227227
let numbers = [16, 58, 510]
228228
```
229229

230-
如上代码创建了一个数字位和他们名字映射的英文版本字典
230+
如上代码创建了一个数字位和它们名字映射的英文版本字典
231231
同时定义了一个准备转换为字符串的整型数组。
232232

233233
您现在可以通过传递一个尾随闭包给`numbers``map`方法来创建对应的字符串版本数组。

‎source/chapter2/10_Properties.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
可以在定义存储属性的时候指定默认值,请参考[构造过程](../chapter2/14_Initialization.html)一章的[默认属性值](../chapter2/14_Initialization.html#default_property_values)一节。也可以在构造过程中设置或修改存储属性的值,甚至修改常量存储属性的值,请参考[构造过程](../chapter2/14_Initialization.html)一章的[在初始化阶段修改常量存储属性](../chapter2/14_Initialization.html#modifying_constant_properties_during_initialization)一节。
2929

30-
下面的例子定义了一个名为`FixedLengthRange`的结构体,他描述了一个在创建后无法修改值域宽度的区间
30+
下面的例子定义了一个名为`FixedLengthRange`的结构体,它描述了一个在创建后无法修改值域宽度的区间
3131

3232
```
3333
struct FixedLengthRange {
@@ -202,7 +202,7 @@ struct AlternativeRect {
202202

203203
> 注意:
204204
>
205-
> 必须使用`var`关键字定义计算属性,包括只读计算属性,因为他们的值不是固定的`let`关键字只用来声明常量属性,表示初始化后再也无法修改的值。
205+
> 必须使用`var`关键字定义计算属性,包括只读计算属性,因为它们的值不是固定的`let`关键字只用来声明常量属性,表示初始化后再也无法修改的值。
206206
207207
只读计算属性的声明可以去掉`get`关键字和花括号:
208208

@@ -243,7 +243,7 @@ println("the volume of fourByFiveByTwo is \(fourByFiveByTwo.volume)")
243243

244244
> 注意:
245245
>
246-
> `willSet``didSet`监视器在属性初始化过程中不会被调用,他们只会当属性的值在初始化之外的地方被设置时被调用
246+
> `willSet``didSet`监视器在属性初始化过程中不会被调用,它们只会当属性的值在初始化之外的地方被设置时被调用
247247
248248
这里是一个`willSet``didSet`的实际例子,其中定义了一个名为`StepCounter`的类,用来统计当人步行时的总步数,可以跟计步器或其他日常锻炼的统计装置的输入数据配合使用。
249249

‎source/chapter2/11_Methods.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ class Player {
285285
}
286286
```
287287

288-
`Player`类创建一个新的`LevelTracker`实例来监测这个用户的发展进度。他提供了`completedLevel`方法:一旦玩家完成某个指定等级就调用它。这个方法为所有玩家解锁下一等级,并且将当前玩家的进度更新为下一等级。(我们忽略了`advanceToLevel`返回的布尔值,因为之前调用`LevelTracker.unlockLevel`时就知道了这个等级已经被解锁了)。
288+
`Player`类创建一个新的`LevelTracker`实例来监测这个用户的发展进度。它提供了`completedLevel`方法:一旦玩家完成某个指定等级就调用它。这个方法为所有玩家解锁下一等级,并且将当前玩家的进度更新为下一等级。(我们忽略了`advanceToLevel`返回的布尔值,因为之前调用`LevelTracker.unlockLevel`时就知道了这个等级已经被解锁了)。
289289

290290
你还可以为一个新的玩家创建一个`Player`的实例,然后看这个玩家完成等级一时发生了什么:
291291

@@ -297,7 +297,7 @@ println("highest unlocked level is now \(LevelTracker.highestUnlockedLevel)")
297297
298298
```
299299

300-
如果你创建了第二个玩家,并尝试让他开始一个没有被任何玩家解锁的等级,那么这次设置玩家当前等级的尝试将会失败:
300+
如果你创建了第二个玩家,并尝试让它开始一个没有被任何玩家解锁的等级,那么这次设置玩家当前等级的尝试将会失败:
301301

302302
```
303303
player = Player(name: "Beto")

‎source/chapter2/16_Automatic_Reference_Counting.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ Swift 提供了两种办法用来解决你在使用类的属性时所遇到的
274274
john = Customer(name: "John Appleseed")
275275
john!.card = CreditCard(number: 1234_5678_9012_3456, customer: john!)
276276

277-
在你关联两个实例后,他们的引用关系如下图所示
277+
在你关联两个实例后,它们的引用关系如下图所示
278278

279279
![](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Art/unownedReference01_2x.png)
280280

@@ -329,7 +329,7 @@ Swift 提供了两种办法用来解决你在使用类的属性时所遇到的
329329

330330
`Country`的构造函数调用了`City`的构造函数。然而,只有`Country`的实例完全初始化完后,`Country`的构造函数才能把`self`传给`City`的构造函数。([在两段式构造过程中有具体描述](14_Initialization.html)
331331

332-
为了满足这种需求,通过在类型结尾处加上感叹号(City!)的方式,将`Country``capitalCity`属性声明为隐式解析可选类型的属性。这表示像其他可选类型一样,`capitalCity`属性的默认值为`nil`但是不需要展开他的值就能访问它。([在隐式解析可选类型中有描述](01_The_Basics.html)
332+
为了满足这种需求,通过在类型结尾处加上感叹号(City!)的方式,将`Country``capitalCity`属性声明为隐式解析可选类型的属性。这表示像其他可选类型一样,`capitalCity`属性的默认值为`nil`但是不需要展开它的值就能访问它。([在隐式解析可选类型中有描述](01_The_Basics.html)
333333

334334
由于`capitalCity`默认值为`nil`,一旦`Country`的实例在构造函数中给`name`属性赋值后,整个初始化过程就完成了。这代表一旦`name`属性被赋值后,`Country`的构造函数就能引用并传递隐式的`self``Country`的构造函数在赋值`capitalCity`时,就能将`self`作为参数传递给`City`的构造函数。
335335

@@ -449,7 +449,7 @@ Swift 有如下要求:只要在闭包内使用`self`的成员,就要用`self
449449

450450
当闭包和捕获的实例总是互相引用时并且总是同时销毁时,将闭包内的捕获定义为无主引用。
451451

452-
相反的,当捕获引用有时可能会是`nil`时,将闭包内的捕获定义为弱引用。弱引用总是可选类型,并且当引用的实例被销毁后,弱引用的值会自动置为`nil`这使我们可以在闭包内检查他们是否存在
452+
相反的,当捕获引用有时可能会是`nil`时,将闭包内的捕获定义为弱引用。弱引用总是可选类型,并且当引用的实例被销毁后,弱引用的值会自动置为`nil`这使我们可以在闭包内检查它们是否存在
453453

454454
>注意:
455455
>

‎source/chapter2/17_Optional_Chaining.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Swift 的可选链和 Objective-C 中的消息为空有些相像,但是 Swift
2424
<a name="optional_chaining_as_an_alternative_to_forced_unwrapping"></a>
2525
## 可选链可替代强制解析
2626

27-
通过在想调用的属性、方法、或子脚本的可选值(`optional value`)(非空)后面放一个问号,可以定义一个可选链。这一点很像在可选值后面放一个叹号来强制拆得其封包内的值。他们的主要的区别在于当可选值为空时可选链即刻失败,然而一般的强制解析将会引发运行时错误。
27+
通过在想调用的属性、方法、或子脚本的可选值(`optional value`)(非空)后面放一个问号,可以定义一个可选链。这一点很像在可选值后面放一个叹号来强制拆得其封包内的值。它们的主要的区别在于当可选值为空时可选链即刻失败,然而一般的强制解析将会引发运行时错误。
2828

2929
为了反映可选链可以调用空(`nil`),不论你调用的属性、方法、子脚本等返回的值是不是可选值,它的返回结果都是一个可选值。你可以利用这个返回值来检测你的可选链是否调用成功,有返回值即成功,返回nil则失败。
3030

@@ -232,7 +232,7 @@ Swift 的可选链和 Objective-C 中的消息为空有些相像,但是 Swift
232232
如果你试图通过可选链获得`Int`值,不论使用了多少层链接返回的总是`Int?`
233233
相似的,如果你试图通过可选链获得`Int?`值,不论使用了多少层链接返回的总是`Int?`
234234

235-
下面的例子试图获取`john``residence`属性里的`address``street`属性。这里使用了两层可选链来联系`residence``address`属性,他们两者都是可选类型
235+
下面的例子试图获取`john``residence`属性里的`address``street`属性。这里使用了两层可选链来联系`residence``address`属性,它们两者都是可选类型
236236

237237
if let johnsStreet = john.residence?.address?.street {
238238
println("John's street name is \(johnsStreet).")

‎source/chapter2/21_Protocols.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,7 @@
525525
init(legs: Int) { self.legs = legs }
526526
}
527527

528-
`Circle,Country,Animal`并没有一个相同的基类,所以采用`AnyObject`类型的数组来装载在他们的实例,如下所示:
528+
`Circle,Country,Animal`并没有一个相同的基类,所以采用`AnyObject`类型的数组来装载在它们的实例,如下所示:
529529

530530
let objects: AnyObject[] = [
531531
Circle(radius: 2.0),

‎source/chapter2/22_Generics.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@
155155
}
156156
}
157157

158-
这个结构体在栈中使用一个`Array`性质的`items`存储值。`Stack`提供两个方法:`push``pop`,从栈中压进一个值和移除一个值。这些方法标记为可变的,因为他们需要修改(或*转换*)结构体的`items`数组。
158+
这个结构体在栈中使用一个`Array`性质的`items`存储值。`Stack`提供两个方法:`push``pop`,从栈中压进一个值和移除一个值。这些方法标记为可变的,因为它们需要修改(或*转换*)结构体的`items`数组。
159159

160160
上面所展现的`IntStack`类型只能用于`Int`值,不过,其对于定义一个泛型`Stack`类(可以处理*任何*类型值的栈)是非常有用的。
161161

@@ -213,7 +213,7 @@
213213

214214
这个需求强制加上一个类型约束作用于`Dictionary`的键上,当然其键类型必须遵循`Hashable`协议(Swift 标准库中定义的一个特定协议)。所有的 Swift 基本类型(如`String``Int``Double``Bool`)默认都是可哈希。
215215

216-
当你创建自定义泛型类型时,你可以定义你自己的类型约束,当然,这些约束要支持泛型编程的强力特征中的多数。抽象概念如`可哈希`具有的类型特征是根据他们概念特征来界定的,而不是他们的直接类型特征
216+
当你创建自定义泛型类型时,你可以定义你自己的类型约束,当然,这些约束要支持泛型编程的强力特征中的多数。抽象概念如`可哈希`具有的类型特征是根据它们概念特征来界定的,而不是它们的直接类型特征
217217

218218
### 类型约束语法
219219

@@ -391,7 +391,7 @@ Swift的`Array`已经提供`append`方法,一个`count`属性和通过下标
391391

392392
下面的列子定义了一个名为`allItemsMatch`的泛型函数,用来检查是否两个`Container`单例包含具有相同顺序的相同元素。如果匹配到所有的元素,那么返回一个为`true``Boolean`值,反之,则相反。
393393

394-
这两个容器可以被检查出是否是相同类型的容器(虽然它们可以是),但他们确实拥有相同类型的元素。这个需求通过一个类型约束和`where`语句结合来表示:
394+
这两个容器可以被检查出是否是相同类型的容器(虽然它们可以是),但它们确实拥有相同类型的元素。这个需求通过一个类型约束和`where`语句结合来表示:
395395

396396
func allItemsMatch<
397397
C1: Container, C2: Container
@@ -434,11 +434,11 @@ Swift的`Array`已经提供`append`方法,一个`count`属性和通过下标
434434
`someContainer``anotherContainer`包含相同的元素类型。
435435
`someContainer`中的元素可以通过不等于操作(`!=`)来检查它们是否彼此不同。
436436

437-
第三个和第四个要求结合起来的意思是`anotherContainer`中的元素也可以通过 `!=` 操作来检查,因为他们在`someContainer`中元素确实是相同的类型。
437+
第三个和第四个要求结合起来的意思是`anotherContainer`中的元素也可以通过 `!=` 操作来检查,因为它们在`someContainer`中元素确实是相同的类型。
438438

439-
这些要求能够使`allItemsMatch`函数比较两个容器,即便他们是不同的容器类型
439+
这些要求能够使`allItemsMatch`函数比较两个容器,即便它们是不同的容器类型
440440

441-
`allItemsMatch`首先检查两个容器是否拥有同样数目的items,如果他们的元素数目不同,没有办法进行匹配,函数就会`false`
441+
`allItemsMatch`首先检查两个容器是否拥有同样数目的items,如果它们的元素数目不同,没有办法进行匹配,函数就会`false`
442442

443443
检查完之后,函数通过`for-in`循环和半闭区间操作(..)来迭代`someContainer`中的所有元素。对于每个元素,函数检查是否`someContainer`中的元素不等于对应的`anotherContainer`中的元素,如果这两个元素不等,则这两个容器不匹配,返回`false`
444444

@@ -460,7 +460,7 @@ Swift的`Array`已经提供`append`方法,一个`count`属性和通过下标
460460
}
461461
// 输出 "All items match."
462462

463-
上面的例子创建一个`Stack`单例来存储`String`,然后压了三个字符串进栈。这个例子也创建了一个`Array`单例,并初始化包含三个同栈里一样的原始字符串。即便栈和数组否是不同的类型,但他们都遵循`Container`协议,而且他们都包含同样的类型值。你因此可以调用`allItemsMatch`函数,用这两个容器作为它的参数。在上面的例子中,`allItemsMatch`函数正确的显示了所有的这两个容器的`items`匹配。
463+
上面的例子创建一个`Stack`单例来存储`String`,然后压了三个字符串进栈。这个例子也创建了一个`Array`单例,并初始化包含三个同栈里一样的原始字符串。即便栈和数组否是不同的类型,但它们都遵循`Container`协议,而且它们都包含同样的类型值。你因此可以调用`allItemsMatch`函数,用这两个容器作为它的参数。在上面的例子中,`allItemsMatch`函数正确的显示了所有的这两个容器的`items`匹配。
464464

465465
[1]: ../chapter2/06_Functions.html
466466
[2]: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Art/stackPushPop_2x.png

‎source/chapter2/23_Advanced_Operators.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@ Swift无所知道自定义类型是否相等或不等,因为等于或者不等
426426
}
427427
```
428428

429-
上述代码实现了相等运算符`==`来判断两个`Vector2D`对象是否有相等的值,相等的概念就是他们有相同的`x`值和相同的`y`值,我们就用这个逻辑来实现。接着使用`==`的结果实现了不相等运算符`!=`
429+
上述代码实现了相等运算符`==`来判断两个`Vector2D`对象是否有相等的值,相等的概念就是它们有相同的`x`值和相同的`y`值,我们就用这个逻辑来实现。接着使用`==`的结果实现了不相等运算符`!=`
430430

431431
现在我们可以使用这两个运算符来判断两个`Vector2D`对象是否相等。
432432

@@ -489,4 +489,4 @@ let plusMinusVector = firstVector +- secondVector
489489
// plusMinusVector 此时的值为 (4.0, -2.0)
490490
```
491491

492-
这个运算符把两个向量的`x`相加,把向量的`y`相减。因为他实际是属于加减运算,所以让它保持了和加法一样的结合性和优先级(`left``140`)。查阅完整的Swift默认结合性和优先级的设置,请移步[表达式](../chapter3/04_Expressions.html);
492+
这个运算符把两个向量的`x`相加,把向量的`y`相减。因为它实际是属于加减运算,所以让它保持了和加法一样的结合性和优先级(`left``140`)。查阅完整的Swift默认结合性和优先级的设置,请移步[表达式](../chapter3/04_Expressions.html);

‎source/chapter3/05_Declarations.md

+10-10
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
新的命名好的枚举,结构,类和协议类型。你也可以使用一条声明来延长一个已经存在的命名好的类型的行为。或者在你的
2929
程序里引入在其他地方声明的符号。
3030

31-
在swift中,大多数声明在某种意义上讲也是执行或同事声明它们的初始化定义。这意味着,因为协议和他们的成员不匹配
31+
在swift中,大多数声明在某种意义上讲也是执行或同事声明它们的初始化定义。这意味着,因为协议和它们的成员不匹配
3232
大多数协议成员需要单独的声明。为了方便起见,也因为这些区别在swift里不是很重要,声明语句同时包含了声明和定义。
3333

3434
>GRAMMAR OF A DECLARATION
@@ -71,7 +71,7 @@
7171
##模块范围
7272

7373
模块范围定义了对模块中其他源文件可见的代码。(注:待改进)在swift的源文件中,最高级别的代码由零个或多个语句,
74-
声明和表达组成。变量,常量和其他的声明语句在一个源文件的最顶级被声明,使得他们对同一模块中的每个源文件都是可见的
74+
声明和表达组成。变量,常量和其他的声明语句在一个源文件的最顶级被声明,使得它们对同一模块中的每个源文件都是可见的
7575

7676
>GRAMMAR OF A TOP-LEVEL DECLARATION
7777
@@ -122,7 +122,7 @@
122122

123123
当常量的值被给定后,常量就将常量名称和表达式初始值不变的结合在了一起,而且不能更改。
124124
这意味着如果常量以类的形式被初始化,类本身的内容是可以改变的,但是常量和类之间的结合关系是不能改变的。
125-
当一个常量被声明为全局变量,它必须被给定一个初始值。当一个常量在类或者结构体中被声明时,他被认为是一个常量
125+
当一个常量被声明为全局变量,它必须被给定一个初始值。当一个常量在类或者结构体中被声明时,它被认为是一个常量
126126
属性。常量并不是可计算的属性,因此不包含getters和setters。(译者注:getters和setters不知道怎么翻译,待改进)
127127

128128
如果常量名是一个元祖形式,元祖中的每一项初始化表达式中都要有对应的值
@@ -168,7 +168,7 @@
168168
var variable name: type = expression
169169

170170
你可以在全局,函数内,或者在类和结构体的声明(context)中使用这种形式来声明一个变量。当变量以这种形式
171-
在全局或者一个函数内被声明时,它代表一个存储型变量。当他在类或者结构体中被声明时,他代表一个存储型变量属性
171+
在全局或者一个函数内被声明时,它代表一个存储型变量。当它在类或者结构体中被声明时,它代表一个存储型变量属性
172172

173173
构造器表达式可以被
174174

@@ -190,8 +190,8 @@
190190
}
191191

192192
你可以在全局,函数体内或者类,结构体,枚举,扩展声明的上下文中使用这种形式的声明。
193-
当变量以这种形式在全局或者一个函数内被声明时,它代表一个计算型变量。当他在类,结构体,枚举,扩展声明的上下文
194-
中中被声明时,他代表一个计算型变量属性
193+
当变量以这种形式在全局或者一个函数内被声明时,它代表一个计算型变量。当它在类,结构体,枚举,扩展声明的上下文
194+
中中被声明时,它代表一个计算型变量属性
195195

196196
getter用来读取变量值,setter用来写入变量值。setter子句是可选择的,只有getter是必需的,你可以将这些语句
197197
都省略,只是简单的直接返回请求值,正如在只读计算属性(read-only computed properites)中描述的那样。
@@ -219,7 +219,7 @@ setter的初始名为newValue,正如在seter声明速记(shorthand setter decl
219219

220220
你可以在全局,函数体内或者类,结构体,枚举,扩展声明的上下文中使用这种形式的声明。
221221
当变量以这种形式在全局或者一个函数内被声明时,监视器代表一个存储型变量监视器;
222-
当他在类,结构体,枚举,扩展声明的上下文中被声明时,监视器代表属性监视器。
222+
当它在类,结构体,枚举,扩展声明的上下文中被声明时,监视器代表属性监视器。
223223

224224
你可以为适合的监视器添加任何存储型属性。你也可以通过重写子类属性的方式为适合的监视器添加任何继承的属性
225225
(无论是存储型还是计算型的),参见重写属性监视器(overriding properyt observers)。
@@ -228,7 +228,7 @@ setter的初始名为newValue,正如在seter声明速记(shorthand setter decl
228228
所有包含监视器的变量声明都必须有类型注释(type annotation)。
229229

230230
当变量或属性的值被改变时,willset和didset监视器提供了一个监视方法(适当的回应)。
231-
监视器不会在变量或属性第一次初始化时不会被运行,他们只有在值被外部初始化语句改变时才会被运行
231+
监视器不会在变量或属性第一次初始化时不会被运行,它们只有在值被外部初始化语句改变时才会被运行
232232

233233
willset监视器只有在变量或属性值被改变之前运行。新的值作为一个常量经过过willset监视器,因此不可以在
234234
willset语句中改变它。didset监视器在变量或属性值被改变后立即运行。和willset监视器相反,为了以防止你仍然
@@ -670,7 +670,7 @@ protocol-property-declaration → variable-declaration-head­variable-name­type
670670
###协议方法声明
671671

672672
协议声明了一致性类型必须在协议声明的主体里通过引入一个协议方法声明来实现一个方法.
673-
协议方法声明和函数方法声明有着相同的形式,包含如下两条规则:他们不包括函数体,你不能在类的声明内为他们的
673+
协议方法声明和函数方法声明有着相同的形式,包含如下两条规则:它们不包括函数体,你不能在类的声明内为它们的
674674
参数提供初始值.举例来说,符合的类型执行协议必需的方法。参见必需方法一节。
675675

676676
使用关键字class可以在协议声明中声明一个类或必需的静态方法。执行这些方法的类也用关键字class声明。
@@ -753,7 +753,7 @@ getter语句,可以选择是否包含setter语句。
753753
以一个将所有类属性完全初始化的指定构造器的调用作为结束。便利构造器不能调用超类的构造器。
754754

755755
你可以使用requierd关键字,将便利构造器和指定构造器标记为每个子类的构造器都必须拥有的。因为指定构造器
756-
不被子类继承,他们必须被立即执行。当子类直接执行所有超类的指定构造器(或使用便利构造器重写指定构造器)时,
756+
不被子类继承,它们必须被立即执行。当子类直接执行所有超类的指定构造器(或使用便利构造器重写指定构造器)时,
757757
必需的便利构造器可以被隐式的执行,亦可以被继承。不像方法,下标脚本那样,你不需要为这些重写的构造器标注
758758
overrride关键字。
759759

‎source/chapter3/07_Patterns.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
模式(pattern)代表了单个值或者复合值的结构。例如,元组`(1, 2)`的结构是逗号分隔的,包含两个元素的列表。因为模式代表一种值的结构,而不是特定的某个值,你可以把模式和各种同类型的值匹配起来。比如,`(x, y)`可以匹配元组`(1, 2)`,以及任何含两个元素的元组。除了将模式与一个值匹配外,你可以从合成值中提取出部分或全部,然后分别把各个部分和一个常量或变量绑定起来。
1919

20-
在Swift中,模式出现在变量和常量的声明(在它们的左侧),`for-in`语句和`switch`语句(在他们的case标签)中。尽管任何模式都可以出现在`switch`语句的case标签中,但在其他情况下,只有通配符模式(wildcard pattern),标识符模式(identifier pattern)和包含这两种模式的模式才能出现。
20+
在Swift中,模式出现在变量和常量的声明(在它们的左侧),`for-in`语句和`switch`语句(在它们的case标签)中。尽管任何模式都可以出现在`switch`语句的case标签中,但在其他情况下,只有通配符模式(wildcard pattern),标识符模式(identifier pattern)和包含这两种模式的模式才能出现。
2121

2222
你可以为通配符模式(wildcard pattern),标识符模式(identifier pattern)和元组模式(tuple pattern)指定类型注释,用来限制这种模式只匹配某种类型的值。
2323

@@ -134,7 +134,7 @@
134134
is type
135135
pattern as type
136136

137-
`is`模式匹配一个值,如果这个值的类型在运行时(runtime)和`is`模式右边的指定类型(或者那个类型的子类)是一致的。`is`模式和`is`操作符一样,他们都进行类型转换,但是抛弃了返回的类型。
137+
`is`模式匹配一个值,如果这个值的类型在运行时(runtime)和`is`模式右边的指定类型(或者那个类型的子类)是一致的。`is`模式和`is`操作符一样,它们都进行类型转换,但是抛弃了返回的类型。
138138

139139
`as`模式匹配一个值,如果这个值的类型在运行时(runtime)和`as`模式右边的指定类型(或者那个类型的子类)是一致的。一旦匹配成功,匹配的值的类型被转换成`as`模式左边指定的模式。
140140

0 commit comments

Comments
 (0)
Please sign in to comment.