Merge pull request #233 from RockyMyx/gh-pages

Update 20_Extension.md
This commit is contained in:
梁杰
2014-06-25 15:12:13 +08:00
2 changed files with 13 additions and 8 deletions

View File

@ -99,6 +99,11 @@ println("A marathon is \(aMarathon) meters long")
如果你使用扩展向一个值类型添加一个构造器该构造器向所有的存储属性提供默认值而且没有定义任何定制构造器custom initializers那么对于来自你的扩展构造器中的值类型你可以调用默认构造器(default initializers)和逐一成员构造器(memberwise initializers)。
正如在值类型的构造器授权中描述的,如果你已经把构造器写成值类型原始实现的一部分,上述规则不再适用。
如果你使用扩展向一个值类型添加一个构造器如果该值类型已经向所有的存储属性提供默认值而且没有定义任何定制构造器custom initializers那么你可以在值类型的扩展构造器中调用默认构造器(default initializers)和逐一成员构造器(memberwise initializers)。
正如在值类型的构造器委托中描述的,如果你已经把构造器写成值类型原始实现的一部分,上述规则不再适用。
下面的例子定义了一个用于描述几何矩形的定制结构体`Rect`。这个例子同时定义了两个辅助结构体`Size``Point`,它们都把`0.0`作为所有属性的默认值:
```swift
@ -267,7 +272,7 @@ extension Character {
该例子向`Character`添加了新的嵌套枚举。这个名为`Kind`的枚举表示特定字符的类型。具体来说,就是表示一个标准的拉丁脚本中的字符是元音还是辅音(不考虑口语和地方变种),或者是其它类型。
这个子还向`Character`添加了一个新的计算实例属性,即`kind`,用来返回合适的`Kind`枚举成员。
这个子还向`Character`添加了一个新的计算实例属性,即`kind`,用来返回合适的`Kind`枚举成员。
现在,这个嵌套枚举可以和一个`Character`值联合使用了:

View File

@ -390,7 +390,7 @@ protocol TextRepresentable {
```swift
extension Dice: TextRepresentable {
cun asText() -> String {
func asText() -> String {
return "A \(sides)-sided dice"
}
}
@ -428,14 +428,14 @@ struct Hamster {
return "A hamster named \(name)"
}
}
extension Hamster: TextRepresentabl {}
extension Hamster: TextRepresentable {}
```
从现在起,`Hamster`的实例可以作为`TextRepresentable`类型使用
```swift
let simonTheHamster = Hamster(name: "Simon")
let somethingTextRepresentable: TextRepresentabl = simonTheHamester
let somethingTextRepresentable: TextRepresentable = simonTheHamester
println(somethingTextRepresentable.asText())
// 输出 "A hamster named Simon"
```
@ -483,7 +483,7 @@ protocol PrettyTextRepresentable: TextRepresentable {
}
```
`遵循``PrettyTextRepresentable`协议的同时,也需要`遵循`TextRepresentable`协议。
遵循`PrettyTextRepresentable`协议的同时,也需要遵循`TextRepresentable`协议。
如下所示,用`扩展``SnakesAndLadders`遵循`PrettyTextRepresentable`协议:
@ -575,7 +575,7 @@ wishHappyBirthday(birthdayPerson)
class Circle: HasArea {
let pi = 3.1415927
var radius: Double
var area:≈radius }
var area: Double { return pi * radius * radius }
init(radius: Double) { self.radius = radius }
}
class Country: HasArea {
@ -676,7 +676,7 @@ for object in objects {
在调用`incrementForCount`方法后,`Int`型`可选值`通过`可选绑定(optional binding)`自动拆包并赋值给常量`amount`。
`incrementForCount`不能被调用时,尝试使用`可选属性``fixedIncrement`来代替。
当`incrementForCount`不能被调用时,尝试使用可选属性`fixedIncrement`来代替。
`ThreeSource`实现了`CounterDataSource`协议,如下所示:
@ -729,4 +729,4 @@ for _ in 1...5 {
// -1
// 0
// 0
```
```