This commit is contained in:
wuxing
2014-06-14 17:25:03 +08:00
parent 1c10a65bd3
commit a516af6a53
12 changed files with 36 additions and 36 deletions

View File

@ -364,7 +364,7 @@ print("\n")
// 68 111 103 33 240 159 144 182
```
上面的例子中前四个10进制代码单元值 (68, 111, 103, 33) 代表了字符`D` `o` `g``!`们的 UTF-8 表示与 ASCII 表示相同。
上面的例子中前四个10进制代码单元值 (68, 111, 103, 33) 代表了字符`D` `o` `g``!`们的 UTF-8 表示与 ASCII 表示相同。
后四个代码单元值 (240, 159, 144, 182) 是`DOG FACE`的4字节 UTF-8 表示。
<a name="UTF-16"></a>
@ -381,7 +381,7 @@ print("\n")
// 68 111 103 33 55357 56374
```
同样,前四个代码单元值 (68, 111, 103, 33) 代表了字符`D` `o` `g``!`们的 UTF-16 代码单元和 UTF-8 完全相同。
同样,前四个代码单元值 (68, 111, 103, 33) 代表了字符`D` `o` `g``!`们的 UTF-16 代码单元和 UTF-8 完全相同。
第五和第六个代码单元值 (55357 和 56374) 是`DOG FACE`字符的UTF-16 表示。
第一个值为`U+D83D`(十进制值为 55357),第二个值为`U+DC36`(十进制值为 56374)。

View File

@ -227,7 +227,7 @@ let digitNames = [
let numbers = [16, 58, 510]
```
如上代码创建了一个数字位和们名字映射的英文版本字典。
如上代码创建了一个数字位和们名字映射的英文版本字典。
同时定义了一个准备转换为字符串的整型数组。
您现在可以通过传递一个尾随闭包给`numbers``map`方法来创建对应的字符串版本数组。

View File

@ -27,7 +27,7 @@
可以在定义存储属性的时候指定默认值,请参考[构造过程](../chapter2/14_Initialization.html)一章的[默认属性值](../chapter2/14_Initialization.html#default_property_values)一节。也可以在构造过程中设置或修改存储属性的值,甚至修改常量存储属性的值,请参考[构造过程](../chapter2/14_Initialization.html)一章的[在初始化阶段修改常量存储属性](../chapter2/14_Initialization.html#modifying_constant_properties_during_initialization)一节。
下面的例子定义了一个名为`FixedLengthRange`的结构体,描述了一个在创建后无法修改值域宽度的区间:
下面的例子定义了一个名为`FixedLengthRange`的结构体,描述了一个在创建后无法修改值域宽度的区间:
```
struct FixedLengthRange {
@ -202,7 +202,7 @@ struct AlternativeRect {
> 注意:
>
> 必须使用`var`关键字定义计算属性,包括只读计算属性,因为们的值不是固定的。`let`关键字只用来声明常量属性,表示初始化后再也无法修改的值。
> 必须使用`var`关键字定义计算属性,包括只读计算属性,因为们的值不是固定的。`let`关键字只用来声明常量属性,表示初始化后再也无法修改的值。
只读计算属性的声明可以去掉`get`关键字和花括号:
@ -243,7 +243,7 @@ println("the volume of fourByFiveByTwo is \(fourByFiveByTwo.volume)")
> 注意:
>
> `willSet`和`didSet`监视器在属性初始化过程中不会被调用,们只会当属性的值在初始化之外的地方被设置时被调用。
> `willSet`和`didSet`监视器在属性初始化过程中不会被调用,们只会当属性的值在初始化之外的地方被设置时被调用。
这里是一个`willSet``didSet`的实际例子,其中定义了一个名为`StepCounter`的类,用来统计当人步行时的总步数,可以跟计步器或其他日常锻炼的统计装置的输入数据配合使用。

View File

@ -285,7 +285,7 @@ class Player {
}
```
`Player`类创建一个新的`LevelTracker`实例来监测这个用户的发展进度。提供了`completedLevel`方法:一旦玩家完成某个指定等级就调用它。这个方法为所有玩家解锁下一等级,并且将当前玩家的进度更新为下一等级。(我们忽略了`advanceToLevel`返回的布尔值,因为之前调用`LevelTracker.unlockLevel`时就知道了这个等级已经被解锁了)。
`Player`类创建一个新的`LevelTracker`实例来监测这个用户的发展进度。提供了`completedLevel`方法:一旦玩家完成某个指定等级就调用它。这个方法为所有玩家解锁下一等级,并且将当前玩家的进度更新为下一等级。(我们忽略了`advanceToLevel`返回的布尔值,因为之前调用`LevelTracker.unlockLevel`时就知道了这个等级已经被解锁了)。
你还可以为一个新的玩家创建一个`Player`的实例,然后看这个玩家完成等级一时发生了什么:
@ -297,7 +297,7 @@ println("highest unlocked level is now \(LevelTracker.highestUnlockedLevel)")
```
如果你创建了第二个玩家,并尝试让开始一个没有被任何玩家解锁的等级,那么这次设置玩家当前等级的尝试将会失败:
如果你创建了第二个玩家,并尝试让开始一个没有被任何玩家解锁的等级,那么这次设置玩家当前等级的尝试将会失败:
```
player = Player(name: "Beto")

View File

@ -274,7 +274,7 @@ Swift 提供了两种办法用来解决你在使用类的属性时所遇到的
john = Customer(name: "John Appleseed")
john!.card = CreditCard(number: 1234_5678_9012_3456, customer: john!)
在你关联两个实例后,们的引用关系如下图所示:
在你关联两个实例后,们的引用关系如下图所示:
![](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Art/unownedReference01_2x.png)
@ -329,7 +329,7 @@ Swift 提供了两种办法用来解决你在使用类的属性时所遇到的
`Country`的构造函数调用了`City`的构造函数。然而,只有`Country`的实例完全初始化完后,`Country`的构造函数才能把`self`传给`City`的构造函数。([在两段式构造过程中有具体描述](14_Initialization.html)
为了满足这种需求通过在类型结尾处加上感叹号City!)的方式,将`Country``capitalCity`属性声明为隐式解析可选类型的属性。这表示像其他可选类型一样,`capitalCity`属性的默认值为`nil`,但是不需要展开的值就能访问它。([在隐式解析可选类型中有描述](01_The_Basics.html)
为了满足这种需求通过在类型结尾处加上感叹号City!)的方式,将`Country``capitalCity`属性声明为隐式解析可选类型的属性。这表示像其他可选类型一样,`capitalCity`属性的默认值为`nil`,但是不需要展开的值就能访问它。([在隐式解析可选类型中有描述](01_The_Basics.html)
由于`capitalCity`默认值为`nil`,一旦`Country`的实例在构造函数中给`name`属性赋值后,整个初始化过程就完成了。这代表一旦`name`属性被赋值后,`Country`的构造函数就能引用并传递隐式的`self``Country`的构造函数在赋值`capitalCity`时,就能将`self`作为参数传递给`City`的构造函数。
@ -449,7 +449,7 @@ Swift 有如下要求:只要在闭包内使用`self`的成员,就要用`self
当闭包和捕获的实例总是互相引用时并且总是同时销毁时,将闭包内的捕获定义为无主引用。
相反的,当捕获引用有时可能会是`nil`时,将闭包内的捕获定义为弱引用。弱引用总是可选类型,并且当引用的实例被销毁后,弱引用的值会自动置为`nil`。这使我们可以在闭包内检查们是否存在。
相反的,当捕获引用有时可能会是`nil`时,将闭包内的捕获定义为弱引用。弱引用总是可选类型,并且当引用的实例被销毁后,弱引用的值会自动置为`nil`。这使我们可以在闭包内检查们是否存在。
>注意:
>

View File

@ -24,7 +24,7 @@ Swift 的可选链和 Objective-C 中的消息为空有些相像,但是 Swift
<a name="optional_chaining_as_an_alternative_to_forced_unwrapping"></a>
## 可选链可替代强制解析
通过在想调用的属性、方法、或子脚本的可选值(`optional value`)(非空)后面放一个问号,可以定义一个可选链。这一点很像在可选值后面放一个叹号来强制拆得其封包内的值。们的主要的区别在于当可选值为空时可选链即刻失败,然而一般的强制解析将会引发运行时错误。
通过在想调用的属性、方法、或子脚本的可选值(`optional value`)(非空)后面放一个问号,可以定义一个可选链。这一点很像在可选值后面放一个叹号来强制拆得其封包内的值。们的主要的区别在于当可选值为空时可选链即刻失败,然而一般的强制解析将会引发运行时错误。
为了反映可选链可以调用空(`nil`不论你调用的属性、方法、子脚本等返回的值是不是可选值它的返回结果都是一个可选值。你可以利用这个返回值来检测你的可选链是否调用成功有返回值即成功返回nil则失败。
@ -232,7 +232,7 @@ Swift 的可选链和 Objective-C 中的消息为空有些相像,但是 Swift
如果你试图通过可选链获得`Int`值,不论使用了多少层链接返回的总是`Int?`
相似的,如果你试图通过可选链获得`Int?`值,不论使用了多少层链接返回的总是`Int?`
下面的例子试图获取`john``residence`属性里的`address``street`属性。这里使用了两层可选链来联系`residence``address`属性,们两者都是可选类型:
下面的例子试图获取`john``residence`属性里的`address``street`属性。这里使用了两层可选链来联系`residence``address`属性,们两者都是可选类型:
if let johnsStreet = john.residence?.address?.street {
println("John's street name is \(johnsStreet).")

View File

@ -525,7 +525,7 @@
init(legs: Int) { self.legs = legs }
}
`Circle,Country,Animal`并没有一个相同的基类,所以采用`AnyObject`类型的数组来装载在们的实例,如下所示:
`Circle,Country,Animal`并没有一个相同的基类,所以采用`AnyObject`类型的数组来装载在们的实例,如下所示:
let objects: AnyObject[] = [
Circle(radius: 2.0),

View File

@ -155,7 +155,7 @@
}
}
这个结构体在栈中使用一个`Array`性质的`items`存储值。`Stack`提供两个方法:`push``pop`,从栈中压进一个值和移除一个值。这些方法标记为可变的,因为们需要修改(或*转换*)结构体的`items`数组。
这个结构体在栈中使用一个`Array`性质的`items`存储值。`Stack`提供两个方法:`push``pop`,从栈中压进一个值和移除一个值。这些方法标记为可变的,因为们需要修改(或*转换*)结构体的`items`数组。
上面所展现的`IntStack`类型只能用于`Int`值,不过,其对于定义一个泛型`Stack`类(可以处理*任何*类型值的栈)是非常有用的。
@ -213,7 +213,7 @@
这个需求强制加上一个类型约束作用于`Dictionary`的键上,当然其键类型必须遵循`Hashable`协议Swift 标准库中定义的一个特定协议)。所有的 Swift 基本类型(如`String``Int` `Double``Bool`)默认都是可哈希。
当你创建自定义泛型类型时,你可以定义你自己的类型约束,当然,这些约束要支持泛型编程的强力特征中的多数。抽象概念如`可哈希`具有的类型特征是根据们概念特征来界定的,而不是们的直接类型特征。
当你创建自定义泛型类型时,你可以定义你自己的类型约束,当然,这些约束要支持泛型编程的强力特征中的多数。抽象概念如`可哈希`具有的类型特征是根据们概念特征来界定的,而不是们的直接类型特征。
### 类型约束语法
@ -391,7 +391,7 @@ Swift的`Array`已经提供`append`方法,一个`count`属性和通过下标
下面的列子定义了一个名为`allItemsMatch`的泛型函数,用来检查是否两个`Container`单例包含具有相同顺序的相同元素。如果匹配到所有的元素,那么返回一个为`true``Boolean`值,反之,则相反。
这两个容器可以被检查出是否是相同类型的容器(虽然它们可以是),但们确实拥有相同类型的元素。这个需求通过一个类型约束和`where`语句结合来表示:
这两个容器可以被检查出是否是相同类型的容器(虽然它们可以是),但们确实拥有相同类型的元素。这个需求通过一个类型约束和`where`语句结合来表示:
func allItemsMatch<
C1: Container, C2: Container
@ -434,11 +434,11 @@ Swift的`Array`已经提供`append`方法,一个`count`属性和通过下标
`someContainer``anotherContainer`包含相同的元素类型。
`someContainer`中的元素可以通过不等于操作(`!=`)来检查它们是否彼此不同。
第三个和第四个要求结合起来的意思是`anotherContainer`中的元素也可以通过 `!=` 操作来检查,因为们在`someContainer`中元素确实是相同的类型。
第三个和第四个要求结合起来的意思是`anotherContainer`中的元素也可以通过 `!=` 操作来检查,因为们在`someContainer`中元素确实是相同的类型。
这些要求能够使`allItemsMatch`函数比较两个容器,即便们是不同的容器类型。
这些要求能够使`allItemsMatch`函数比较两个容器,即便们是不同的容器类型。
`allItemsMatch`首先检查两个容器是否拥有同样数目的items如果们的元素数目不同,没有办法进行匹配,函数就会`false`
`allItemsMatch`首先检查两个容器是否拥有同样数目的items如果们的元素数目不同,没有办法进行匹配,函数就会`false`
检查完之后,函数通过`for-in`循环和半闭区间操作(..)来迭代`someContainer`中的所有元素。对于每个元素,函数检查是否`someContainer`中的元素不等于对应的`anotherContainer`中的元素,如果这两个元素不等,则这两个容器不匹配,返回`false`
@ -460,7 +460,7 @@ Swift的`Array`已经提供`append`方法,一个`count`属性和通过下标
}
// 输出 "All items match."
上面的例子创建一个`Stack`单例来存储`String`,然后压了三个字符串进栈。这个例子也创建了一个`Array`单例,并初始化包含三个同栈里一样的原始字符串。即便栈和数组否是不同的类型,但们都遵循`Container`协议,而且们都包含同样的类型值。你因此可以调用`allItemsMatch`函数,用这两个容器作为它的参数。在上面的例子中,`allItemsMatch`函数正确的显示了所有的这两个容器的`items`匹配。
上面的例子创建一个`Stack`单例来存储`String`,然后压了三个字符串进栈。这个例子也创建了一个`Array`单例,并初始化包含三个同栈里一样的原始字符串。即便栈和数组否是不同的类型,但们都遵循`Container`协议,而且们都包含同样的类型值。你因此可以调用`allItemsMatch`函数,用这两个容器作为它的参数。在上面的例子中,`allItemsMatch`函数正确的显示了所有的这两个容器的`items`匹配。
[1]: ../chapter2/06_Functions.html
[2]: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Art/stackPushPop_2x.png

View File

@ -426,7 +426,7 @@ Swift无所知道自定义类型是否相等或不等因为等于或者不等
}
```
上述代码实现了相等运算符`==`来判断两个`Vector2D`对象是否有相等的值,相等的概念就是们有相同的`x`值和相同的`y`值,我们就用这个逻辑来实现。接着使用`==`的结果实现了不相等运算符`!=`
上述代码实现了相等运算符`==`来判断两个`Vector2D`对象是否有相等的值,相等的概念就是们有相同的`x`值和相同的`y`值,我们就用这个逻辑来实现。接着使用`==`的结果实现了不相等运算符`!=`
现在我们可以使用这两个运算符来判断两个`Vector2D`对象是否相等。
@ -489,4 +489,4 @@ let plusMinusVector = firstVector +- secondVector
// plusMinusVector 此时的值为 (4.0, -2.0)
```
这个运算符把两个向量的`x`相加,把向量的`y`相减。因为实际是属于加减运算,所以让它保持了和加法一样的结合性和优先级(`left``140`)。查阅完整的Swift默认结合性和优先级的设置请移步[表达式](../chapter3/04_Expressions.html);
这个运算符把两个向量的`x`相加,把向量的`y`相减。因为实际是属于加减运算,所以让它保持了和加法一样的结合性和优先级(`left``140`)。查阅完整的Swift默认结合性和优先级的设置请移步[表达式](../chapter3/04_Expressions.html);