{
> case Empty
> indirect case Node(value: T, left: Tree, right:Tree)
> }
-为了间接的使用一个枚举的所有事件,使用`indirect`修饰符标记整个枚举-当枚举有许多事件且每个事件都需要使用`indirect`修饰符标记的时候这将非常便利。
+为了间接的使用一个枚举的所有用例,使用`indirect`修饰符标记整个枚举-当枚举有许多用例且每个用例都需要使用`indirect`修饰符标记的时候这将非常便利。
-一个被`indirect`修饰符标记的枚举事件必需有一个关联值。一个使用`indirect`修饰符标记的枚举包含有着关联值的事件和没有关联值的事件的混合。就是说,它不能包含任何也使用`indirect`修饰符标记的事件。
+一个被`indirect`修饰符标记的枚举用例必需有一个关联值。一个使用`indirect`修饰符标记的枚举包含有着关联值的用例和没有关联值的用例的混合。就是说,它不能包含任何也使用`indirect`修饰符标记的用例。
-###使用原始值类型事件的枚举(Enumerations with Cases of a Raw-Value Type)
+###使用原始值类型用例的枚举(Enumerations with Cases of a Raw-Value Type)
-以下的形式声明了一个包含相同基础类型的枚举事件的枚举:
+以下的形式声明了一个包含相同基础类型的枚举用例的枚举:
> enum `enumeration name`: `raw value type`, `adopted protocols`{
> case `enumeration case 1` = `raw value 1`
> case `enumeration case 2` = `raw value 2`
> }
-在这种形式中,每一个事件块由`case`关键字开始,后面紧接着一个或多个以逗号分隔的枚举事件。和第一种形式的枚举事件不同,这种形式的枚举事件包含一个同类型的基础值,叫做*原始值(raw value)*。这些值的类型在*原始值类型(raw-value type)*中被指定,必须表示一个整数,浮点数,字符串,或者一个字符。特别是*原始值类型(raw-value type)*必需遵守`Equatable`类型的协议和下列形式中的一种字面量构造协议(literal-convertible protocols):整型字面量有`IntergerLiteralConvertible`,浮点行字面量有`FloatingPointLiteralConvertible`,包含任意数量字符的字符串型字面量有`StringLiteralConvertible`,仅包含一个单一字符的字符串型字面量有`ExtendedGraphemeClusterLiteralConvertible`。每一个事件必须有唯一的名字,必须有一个唯一的初始值。
+在这种形式中,每一个用例块由`case`关键字开始,后面紧接着一个或多个以逗号分隔的枚举用例。和第一种形式的枚举用例不同,这种形式的枚举用例包含一个同类型的基础值,叫做*原始值(raw value)*。这些值的类型在*原始值类型(raw-value type)*中被指定,必须表示一个整数,浮点数,字符串,或者一个字符。特别是*原始值类型(raw-value type)*必需遵守`Equatable`类型的协议和下列形式中的一种字面量构造协议(literal-convertible protocols):整型字面量有`IntergerLiteralConvertible`,浮点行字面量有`FloatingPointLiteralConvertible`,包含任意数量字符的字符串型字面量有`StringLiteralConvertible`,仅包含一个单一字符的字符串型字面量有`ExtendedGraphemeClusterLiteralConvertible`。每一个用例必须有唯一的名字,必须有一个唯一的初始值。
-如果初始值类型被指定为`Int`,则不必为事件显式的指定值,它们会隐式的被标为值`0,1,2`等。每一个没有被赋值的`Int`类型时间会隐式的赋予一个初始值,它们是自动递增的。
+如果初始值类型被指定为`Int`,则不必为用例显式的指定值,它们会隐式的被标为值`0,1,2`等。每一个没有被赋值的`Int`类型时间会隐式的赋予一个初始值,它们是自动递增的。
```Swift
num ExampleEnum: Int {
@@ -535,7 +553,7 @@ num ExampleEnum: Int {
在上面的例子中,`ExampleEnum.A`的值是`0`,`ExampleEnum.B`的值是`1`。因为`ExampleEnum.C`的值被显式的设定为`5`,因此`ExampleEnum.D`的值会自动增长为`6`。
-如果原始值类型被指定为`String`类型,你不用明确的为事件指定值,每一个没有指定的事件会隐式地用与事件名字相同的字符串指定。
+如果原始值类型被指定为`String`类型,你不用明确的为用例指定值,每一个没有指定的用例会隐式地用与用例名字相同的字符串指定。
> enum WeekendDay: String {
> case Saturday, Sunday
@@ -543,14 +561,14 @@ num ExampleEnum: Int {
在上面这个例子中,`WeekendDay.Saturday`的原始值是`"Saturday"`,`WeekendDay.Sunday`的原始值是`"Sunday"`。
-拥有多种事件的原始值类型的枚举含蓄地遵循定义在Swift标准库中的`RawRepresentable`协议。所以,它们拥有一个原始值(`rawValue`)属性和一个有着`init?(rawValue: RawValue)`签名的可失败构造器(a failable initializer)。可以使用原始值属性去取的枚举事件的原始值,就像在`ExampleEnum.B.rawValue`中一样。如果有一个事件符合,也可以使用原始值去找到一个符合的事件,通过调用枚举的可失败构造器,如`ExampleEnum(rawValue: 5)`,这个可失败构造器返回一个可选的事件。想得到更多的信息和关于原始值类型查看更多信息和获取初始值类型事件的信息,参阅初始值[原始值(Raw Values)](TODO)。
+拥有多种用例的原始值类型的枚举含蓄地遵循定义在Swift标准库中的`RawRepresentable`协议。所以,它们拥有一个原始值(`rawValue`)属性和一个有着`init?(rawValue: RawValue)`签名的可失败构造器(a failable initializer)。可以使用原始值属性去取的枚举用例的原始值,就像在`ExampleEnum.B.rawValue`中一样。如果有一个用例符合,也可以使用原始值去找到一个符合的用例,通过调用枚举的可失败构造器,如`ExampleEnum(rawValue: 5)`,这个可失败构造器返回一个可选的用例。想得到更多的信息和关于原始值类型查看更多信息和获取初始值类型用例的信息,参阅初始值[原始值(Raw Values)](TODO)。
-###获得枚举事件
+###获得枚举用例
-使用点(.)来引用枚举类型的事件,如`EnumerationType.EnumerationCase`。当枚举类型可以上下文推断出时,可以省略它(.仍然需要),参照枚举语法[(Enumeration Syntax)](TODO)和[显式成员表达(Implicit Member Expression)](TODO)。
+使用点(.)来引用枚举类型的用例,如`EnumerationType.EnumerationCase`。当枚举类型可以上下文推断出时,可以省略它(.仍然需要),参照枚举语法[(Enumeration Syntax)](TODO)和[显式成员表达(Implicit Member Expression)](TODO)。
-使用`switch`语句来检验枚举事件的值,正如使用[switch语句匹配枚举值(Matching Enumeration Values with a Switch Statement)](TODO)一节描述的那样。枚举类型是模式匹配(pattern-matched)的,和其相反的是`switch`语句case块中枚举事件匹配,在[枚举事件类型(Enumeration Case Pattern)](TODO)中有描述。
+使用`switch`语句来检验枚举用例的值,正如使用[switch语句匹配枚举值(Matching Enumeration Values with a Switch Statement)](TODO)一节描述的那样。枚举类型是模式匹配(pattern-matched)的,和其相反的是`switch`语句case块中枚举用例匹配,在[枚举用例类型(Enumeration Case Pattern)](TODO)中有描述。
> 枚举声明语法
@@ -1057,4 +1075,4 @@ Swift提供了三个级别的权限控制:`public`, `internal`, 和 `private`
>访问级别修饰符 → **public** | **public(set)**
>
>访问级别修饰符 → [访问级别修饰符(access-level-modeifier)](TODO) [访问级别修饰符列表(access-level-modeifiers)](TODO) _可选_
-
\ No newline at end of file
+
diff --git a/source/chapter3/06_Attributes.md b/source/chapter3/06_Attributes.md
index aa81dcd4..21f5b989 100755
--- a/source/chapter3/06_Attributes.md
+++ b/source/chapter3/06_Attributes.md
@@ -6,7 +6,7 @@
> 校对:[numbbbbb](https://github.com/numbbbbb), [stanzhai](https://github.com/stanzhai)
> 2.0
-> 翻译+校对:[KYawn](https://github.com/KYawn)
+> 翻译+校对:[KYawn](https://github.com/KYawn),[小铁匠Linus](https://github.com/kevin833752)
本页内容包括:
@@ -70,7 +70,10 @@
// First release
protocol MyProtocol {
// protocol definition
-}
+}
+```
+
+```swift
// Subsequent release renames MyProtocol
protocol MyRenamedProtocol {
// protocol definition
@@ -80,14 +83,14 @@ protocol MyRenamedProtocol {
typealias MyProtocol = MyRenamedProtocol
```
-
-你可以在一个单独的声明上使用多个`available`特性,以详细说明该声明在不同平台上的有效性。编译器只有在当前的目标平台和`available`特性中指定的平台匹配时,才会使用`available`特性
+你可以在一个单独的声明上使用多个`available`特性,以详细说明该声明在不同平台上的有效性。编译器只有在当前的目标平台和`available`特性中指定的平台匹配时,才会使用`available`特性。
如果`available`特性除了平台名称参数外,只指定了一个`introduced `参数,那么可以使用以下简写语法代替:
@available(`platform name` `version number`, *)
-`available`特性的简写语法可以简明地表达出多个平台的可用性。尽管这两种形式在功能上是相同的,但请尽可能地使用简明语法形式。
+`available`特性的简写语法可以简明地表达出多个平台的可用性。尽管这两种形式在功能上是相同的,但请尽可能地使用简明语法形式。
+
```swift
@available(iOS 8.0, OSX 10.10, *)
class MyClass {
@@ -107,11 +110,11 @@ class MyClass {
```swift
@objc
-class ExampleClass {
+class ExampleClass: NSObject {
var enabled: Bool {
@objc(isEnabled) get {
// Return the appropriate value
- }
+ }
}
}
```
@@ -138,7 +141,7 @@ class ExampleClass {
在类上使用该特性表示该类是应用程序委托类,使用该特性与调用`NSApplicationMain(_:_:)`函数并且把该类的名字作为委托类的名字传递给函数的效果相同。
-如果你不想使用这个特性,可以提供一个`main.swift`文件,并且提供一个`main`函数去调用`NSApplicationMain(_:_:)`函数。比如,如果你的应用程序使用一个派生于`NSApplication`的自定义子类作为主要类,你可以调用`NSApplicationMain`函数而不是使用该特性。
+如果你不想使用这个特性,可以提供一个`main.swift`文件,并且提供一个`main()`函数去调用`NSApplicationMain(_:_:)`函数。比如,如果你的应用程序使用一个派生于`NSApplication`的自定义子类作为主要类,你可以调用`NSApplicationMain`函数而不是使用该特性。
`NSCopying`
@@ -148,7 +151,7 @@ class ExampleClass {
`NSManaged`
-该特性用于修饰`NSManagedObject`子类中的存储型变量属性,表明属性的存储和实现由Core Data在运行时基于相关实体描述动态提供。
+该特性用于修饰`NSManagedObject`子类中的实例方法或存储型变量属性,表明属性的存储和实现由Core Data在运行时基于相关实体描述动态提供。对于标记了`NSManaged`特性的属性,Core Data也会在运行时提供存储。
`testable`
@@ -164,16 +167,15 @@ class ExampleClass {
该特性应用于方法或函数声明,当方法或函数被调用,但其结果未被使用时,该特性会让编译器会产生警告。
-你可以使用这个特性提供一个警告信息,这个警告信息是关于不正确地使用未变异的方法的,这个方法也有一个对应的变异方法。
+你可以使用这个特性提供一个警告信息,这个警告信息是关于不正确地使用未变异的方法,这个方法也有一个对应的变异方法。
-`warn_unused_result`有下面两个可选的参数。
+`warn_unused_result`特性会有选择地采用下面两个参数之一。
-- `message`参数用来提供警告信息,并在因当方法或函数被调用,但其结果未被使用时,显示警告信息。格式如下:
+- `message`参数用来提供警告信息。在当方法或函数被调用,但其结果未被使用时,会显示警告信息。格式如下:
`message=message`
这里的`message`由一个字符串文字构成。
- `mutable_variant`参数用于提供变异方法的名称,如果未变异方法以一个可变的值被调用而且其结果并未被使用时,应该使用此变异方法。格式如下(方法名有字符串构成):
`mutable_variant=method name`
-
-比如,Swift标准库提供了变异方法`sortInPlace()`和未变异方法`sort()`集合,它们的元素生成器符合`Comparable`协议。如果你调用了`sort()`方法,而没有使用它的结果,很有可能,你打算使用变异方法`sortInPlace()`替代。
+比如,Swift标准库同时提供了变异方法`sortInPlace()`和未变异方法`sort()`集合,它们的元素生成器符合`Comparable`协议。如果你调用了`sort()`方法,而没有使用它的结果,其实很有可能,你是打算使用变异方法`sortInPlace()`。
### Interface Builder使用的声明特性
@@ -190,7 +192,7 @@ Interface Builder特性是Interface Builder用来与Xcode同步的声明特性
该特性用于函数的类型,它指出函数调用的约定。
-`convention`特性有下面几个可选的参数。
+`convention`特性总是与下面的参数之一一起出现。
- `swift`参数用于表明一个Swift函数引用。这是Swift中标准的函数值调用约定。
@@ -205,14 +207,14 @@ Interface Builder特性是Interface Builder用来与Xcode同步的声明特性
该特性用于修饰函数或方法的类型,表明该函数或方法不会返回到它的调用者中去。你也可以用它标记函数或方法的声明,表示函数或方法的相应类型,`T`,是`@noreturn T`。
> 特性语法
-> *特性* → **@** [*特性名*](#attribute_name) [*特性参数子句*](#attribute_argument_clause) _可选_
+> *特性* → **@** [*特性名*](#attribute_name) [*特性参数子句*](#attribute_argument_clause) (可选)
> *特性名* → [*标识符*](02_Lexical_Structure.html#identifiers)
-> *特性参数子句* → **(** [*平衡令牌列表*](#balanced_tokens) _可选_ **)**
-> *特性(Attributes)列表* → [*特色*](#attribute) [*特性(Attributes)列表*](#attributes) _可选_
-> *平衡令牌列表* → [*平衡令牌*](#balanced_token) [*平衡令牌列表*](#balanced_tokens) _可选_
-> *平衡令牌* → **(** [*平衡令牌列表*](#balanced_tokens) _可选_ **)**
-> *平衡令牌* → **[** [*平衡令牌列表*](#balanced_tokens) _可选_ **]**
-> *平衡令牌* → **{** [*平衡令牌列表*](#balanced_tokens) _可选_ **}**
+> *特性参数子句* → **(** [*平衡令牌列表*](#balanced_tokens) (可选) **)**
+> *特性(Attributes)列表* → [*特色*](#attribute) [*特性(Attributes)列表*](#attributes) (可选)
+> *平衡令牌列表* → [*平衡令牌*](#balanced_token) [*平衡令牌列表*](#balanced_tokens) (可选)
+> *平衡令牌* → **(** [*平衡令牌列表*](#balanced_tokens) (可选) **)**
+> *平衡令牌* → **[** [*平衡令牌列表*](#balanced_tokens) (可选) **]**
+> *平衡令牌* → **{** [*平衡令牌列表*](#balanced_tokens) (可选) **}**
> *平衡令牌* → **任意标识符, 关键字, 字面量或运算符**
> *平衡令牌* → **任意标点除了(, ), [, ], {, 或 }**
diff --git a/source/chapter3/07_Patterns.md b/source/chapter3/07_Patterns.md
index 056cdd22..d9aa54c2 100755
--- a/source/chapter3/07_Patterns.md
+++ b/source/chapter3/07_Patterns.md
@@ -6,7 +6,8 @@
> 校对:[numbbbbb](https://github.com/numbbbbb), [stanzhai](https://github.com/stanzhai)
> 2.0
-> 翻译+校对:[ray16897188](https://github.com/ray16897188)
+> 翻译+校对:[ray16897188](https://github.com/ray16897188),
+> [BridgeQ](https://github.com/WXGBridgeQ)
本页内容包括:
@@ -132,7 +133,7 @@ let (a): Int = 2 // a: Int = 2
## 可选模式(Optional Pattern)
-可选模式与封装在一个`Optional(T)`或者一个`ExplicitlyUnwrappedOptional(T)`枚举中的`Some(T)`用例相匹配。可选模式由一个标识符模式和紧随其后的一个问号组成,在某些情况下表现为枚举用例模式。
+可选模式与封装在一个`Optional(Wrapped)`或者一个`ExplicitlyUnwrappedOptional(Wrapped)`枚举中的`Some(Wrapped)`用例相匹配。可选模式由一个标识符模式和紧随其后的一个问号组成,在某些情况下表现为枚举用例模式。
由于可选模式是`optional`和`ImplicitlyUnwrappedOptional`枚举用例模式的语法糖(syntactic sugar),下面的2种写法是一样的:
diff --git a/source/chapter4/02_Type_Custom.md b/source/chapter4/02_Type_Custom.md
index 56ab7f12..b7d463b5 100644
--- a/source/chapter4/02_Type_Custom.md
+++ b/source/chapter4/02_Type_Custom.md
@@ -170,7 +170,8 @@ Program ended with exit code: 0
- 如果小伙伴们现在用的是Beta版的Xcode,注意苹果官方Blog中,在代码第17行如果在Xcode Beta4下是错误的,这里的协议是,LogicValue而不是BooleanVue,所以记得看错误提示才是好习惯。
- 注意代码第34行,完美支持if判断,且输出结果为“老码请你吃火锅”,老码也是说说而已,请不要当真。
-
+
+
####支持兼容各们各派的类型
小伙伴们,江湖风险,门派众多,老码有自己的OCBool类型,可能嵩山少林有自己的SSBool类型,甚至连郭美美都可能有自己的MMBool类型,所以OCBool必须能够识别这些类型,这些各门各派的类型,只要支持LogicValue协议,就应该可以被识别,看老码怎么做,
diff --git a/swift 2.0引用图片/1.png b/swift 2.0引用图片/1.png
deleted file mode 100644
index 20374e2d..00000000
Binary files a/swift 2.0引用图片/1.png and /dev/null differ
diff --git a/swift 2.0引用图片/2.png b/swift 2.0引用图片/2.png
deleted file mode 100644
index 8a90b39c..00000000
Binary files a/swift 2.0引用图片/2.png and /dev/null differ
diff --git a/swift 2.0引用图片/3.png b/swift 2.0引用图片/3.png
deleted file mode 100644
index 8ea56387..00000000
Binary files a/swift 2.0引用图片/3.png and /dev/null differ
diff --git a/swift 2.0引用图片/4.png b/swift 2.0引用图片/4.png
deleted file mode 100644
index 134628c4..00000000
Binary files a/swift 2.0引用图片/4.png and /dev/null differ
diff --git a/swift 2.0引用图片/5.png b/swift 2.0引用图片/5.png
deleted file mode 100644
index a0a2db6b..00000000
Binary files a/swift 2.0引用图片/5.png and /dev/null differ
diff --git a/swift 2.0引用图片/6.png b/swift 2.0引用图片/6.png
deleted file mode 100644
index 4ad5a41e..00000000
Binary files a/swift 2.0引用图片/6.png and /dev/null differ