diff --git a/source/chapter3/05_Declarations.md b/source/chapter3/05_Declarations.md index 594ba05f..7a66795a 100755 --- a/source/chapter3/05_Declarations.md +++ b/source/chapter3/05_Declarations.md @@ -7,7 +7,7 @@ > 校对:[numbbbbb](https://github.com/numbbbbb), [stanzhai](https://github.com/stanzhai) > 2.0 -> 翻译+校对:[Lenhoon](https://github.com/Lenhoon), +> 翻译+校对:[Lenhoon](https://github.com/Lenhoon), > [BridgeQ](https://github.com/WXGBridgeQ) 本页包含内容: @@ -478,7 +478,7 @@ plusOne(10) 枚举类型可以采用任何数量的协议,但是这些协议不能从类,结构体和其他的枚举继承。 -不像类或者结构体。枚举类型并不提供隐式的初始构造器,所有构造器必须显式的声明。构造器可以委托枚举中的其他构造器,但是构造过程仅当构造器将一个枚用例指定给`self`才全部完成。 +不像类或者结构体。枚举类型并不提供隐式的初始构造器,所有构造器必须显式的声明。构造器可以委托枚举中的其他构造器,但是构造过程仅当构造器将一个枚举用例指定给`self`才全部完成。 和结构体类似但是和类不同,枚举是值类型:枚举实例在赋予变量或常量时,或者被函数调用时被复制。 更多关于值类型的信息,参见结构体和枚举都是[值类型(Structures and Enumerations Are Value Types)](TODO)一节。 @@ -497,24 +497,24 @@ plusOne(10) 这种形式的枚举声明在其他语言中有时被叫做*可识别联合(discrinminated)*。 -这种形式中,每一个用例块由关键字`case`开始,后面紧接着一个或多个以逗号分隔的枚举用例。每一个用例名必须是独一无二的。每一个用例也可以指定它所存储的指定类型的值,这些类型在*关联值类型(associated values types)*的元组里被指定,立即书写在用例名后。 - -枚举用例也可以指定函数作为其存储的值,从而通过特定的关联值创建一个枚举实例。和真正的函数一样,你可以获取一个枚举用例的引用,然后在后续代码中调用它。 - -```swift -enum Number { - case Integer(Int) - case Real(Double) -} -let f = Number.Integer -// f is a function of type (Int) -> Number -// f 是一个传入 Int 返回 Number 类型的函数 - -// Apply f to create an array of Number instances with integer values -// 利用函数 f 把一个整数数组转成 Number 数组 -let evenInts: [Number] = [0, 2, 4, 6].map(f) -``` - +这种形式中,每一个用例块由关键字`case`开始,后面紧接着一个或多个以逗号分隔的枚举用例。每一个用例名必须是独一无二的。每一个用例也可以指定它所存储的指定类型的值,这些类型在*关联值类型(associated values types)*的元组里被指定,立即书写在用例名后。 + +枚举用例也可以指定函数作为其存储的值,从而通过特定的关联值创建一个枚举实例。和真正的函数一样,你可以获取一个枚举用例的引用,然后在后续代码中调用它。 + +```swift +enum Number { + case Integer(Int) + case Real(Double) +} +let f = Number.Integer +// f is a function of type (Int) -> Number +// f 是一个传入 Int 返回 Number 类型的函数 + +// Apply f to create an array of Number instances with integer values +// 利用函数 f 把一个整数数组转成 Number 数组 +let evenInts: [Number] = [0, 2, 4, 6].map(f) +``` + 获得更多关于关联值类型的信息和例子,请查看[关联值(Associated Values)](TODO)一节。 枚举有一个递归结构,就是说,枚举有着枚举类型自身实例的关联值的用例。然而,枚举类型的实例有值语义,意味着它们在内存中有着固定的位置。为了支持递归,编译器必需插入一个间接层。 @@ -1075,4 +1075,4 @@ Swift提供了三个级别的权限控制:`public`, `internal`, 和 `private` >访问级别修饰符 → **public­** | **public­(­set­)­** > >访问级别修饰符 → [访问级别修饰符(access-level-modeifier)](TODO) [访问级别修饰符列表(access-level-modeifiers)](TODO) _可选_ -­ \ No newline at end of file +­