校正+翻译 From SketchK

主要内容
1 `类型转换`章节中的`检查类型`一节中代码更新(++号废弃)
2 `类型转换`章节中的`AnyObjcect`一节中文字更新及错误纠正
3 `嵌套类型`章节中的正文一节中文字有歧义
4 `扩展`章节中的`构造器`一节中的文字有误(翻译内容与原文不符)
5 `扩展`章节中的`下标`一节中的代码更新
6 `协议`章节中的`委托模式`一节中统一文字表述(Control Flow翻译为控制流)
7 `协议`章节中的`委托模式`一节中代码更新
8 `协议`章节中的`可选协议要求`一节中文字有误
9  校正`泛型`一章的内容,没有发现明显错误容
This commit is contained in:
Sketchk
2016-05-16 21:54:23 +08:00
parent 3a1a54cce9
commit f5a6be2ca3
5 changed files with 26 additions and 17 deletions

View File

@ -10,6 +10,9 @@
> 2.1
> 校对:[shanks](http://codebuild.me)
>
> 2.2
> 翻译+校对:[SketchK](https://github.com/SketchK) 2016-05-16
本页包含内容:
@ -106,7 +109,7 @@ print("A marathon is \(aMarathon) meters long")
扩展能为类添加新的便利构造器,但是它们不能为类添加新的指定构造器或析构器。指定构造器和析构器必须总是由原始的类实现来提供。
> 注意
如果你使用扩展为一个值类型添加构造器,该值类型的原始实现中未定义任何定制的构造器时,你可以在扩展中的构造器里调用逐一成员构造器。如果该值类型为所有存储属性提供了默认值,你还可以在扩展中的构造器里调用默认构造器。
如果你使用扩展为一个值类型添加构造器,同时该值类型的原始实现中未定义任何定制的构造器所有存储属性提供了默认值,那么我们就可以在扩展中的构造器里调用默认构造器和逐一成员构造器
正如在[值类型的构造器代理](./14_Initialization.html#initializer_delegation_for_value_types)中描述的,如果你把定制的构造器写在值类型的原始实现中,上述规则将不再适用。
下面的例子定义了一个用于描述几何矩形的结构体 `Rect`。这个例子同时定义了两个辅助结构体 `Size``Point`,它们都把 `0.0` 作为所有属性的默认值:
@ -223,11 +226,10 @@ someInt.square()
```swift
extension Int {
subscript(var digitIndex: Int) -> Int {
subscript(digitIndex: Int) -> Int {
var decimalBase = 1
while digitIndex > 0 {
for _ in 0..<digitIndex {
decimalBase *= 10
--digitIndex
}
return (self / decimalBase) % 10
}