diff --git a/source/SUMMARY.md b/source/SUMMARY.md
index 4247ef94..cd3cdcb8 100755
--- a/source/SUMMARY.md
+++ b/source/SUMMARY.md
@@ -27,7 +27,7 @@
* [扩展](chapter2/20_Extensions.md)
* [协议](chapter2/21_Protocols.md)
* [泛型](chapter2/22_Generics.md)
- * [权限控制](chapter2/23_Access Control.md)
+ * [权限控制](chapter2/23_Access_Control.md)
* [高级操作符](chapter2/24_Advanced_Operators.md)
* [语言参考](chapter3/chapter3.md)
* [关于语言参考](chapter3/01_About_the_Language_Reference.md)
@@ -43,3 +43,6 @@
* [苹果官方Blog官方翻译](chapter4/chapter4.md)
* [Access Control 权限控制的黑与白](chapter4/01_Access_Control.md)
* [造个类型不是梦-白话Swift类型创建](chapter4/02_Type_Custom.md)
+ * [WWDC里面的那个“大炮打气球”](chapter4/03_Ballons.md)
+ * [Swift与C语言指针友好合作](chapter4/04_Interacting_with_C_Pointers.md)
+ * [引用类型和值类型的恩怨](chapter4/05_Value_and_Reference_Types.md)
\ No newline at end of file
diff --git a/source/chapter1/03_revision_history.md b/source/chapter1/03_revision_history.md
index 1d73c730..cb50cde4 100644
--- a/source/chapter1/03_revision_history.md
+++ b/source/chapter1/03_revision_history.md
@@ -7,6 +7,7 @@
本页内容包括:
+- [XCode6 Beta6 Swift语法文档更新](#xcode6_beta6)
- [XCode6 Beta5 Swift语法文档更新](#xcode6_beta5)
- [XCode6 Beta4 Swift语法文档更新](#xcode6_beta4)
- [XCode6 Beta3 Swift语法文档更新](#xcode6_beta3)
@@ -16,6 +17,40 @@
以下部分是针对XCode6每一次Beta版本直至正式版发布,Swift语法部分的更新归类
+
+### XCode6 Beta6中Swift语法更新
+
+
+
+
+ | 发布日期 |
+ 语法变更记录 |
+
+
+
+
+ | 2014-08-18 |
+
+
+ 在协议中关于初始化需求部分增加一个新的小节
+
+
+ 为“类专有”协议集增加了一个新的小节
+
+
+ 断言现在可以使用字符串内插语法,并删除了文档中有冲突的注释
+
+
+ 更新了连接字符串和字符小节来说明一个事实,那就是字符串和字符不能再用+号运算符或者复合加法运算符+=连接,这两种运算符现在只能用于字符串相连。请使用String类型的append方法在一个字符串的尾部增加单个字符
+
+
+ 在属性声明章节增加了关于availability属性的一些信息
+
+
+ |
+
+
+
### XCode6 Beta5中Swift语法更新
@@ -90,8 +125,10 @@
+
#### XCode6 Beta4中Swift语法更新
+
+
#### XCode6 Beta3中Swift语法更新
+
+
#### XCode6 Beta2中Swift语法更新
+
+
#### XCode6 Beta1中Swift语法更新
+
diff --git a/source/chapter2/23_Access Control.md b/source/chapter2/23_Access_Control.md
similarity index 100%
rename from source/chapter2/23_Access Control.md
rename to source/chapter2/23_Access_Control.md
diff --git a/source/chapter4/01_Access_Control.md b/source/chapter4/01_Access_Control.md
index d046aede..eef55359 100644
--- a/source/chapter4/01_Access_Control.md
+++ b/source/chapter4/01_Access_Control.md
@@ -81,4 +81,7 @@ Private(私有级别)的权限最严格,它可以用来隐藏某些功能
如果您想了解更多关于权限控制的内容,可以查看苹果官方最新的《The Swift Language》和《Using Swift with Cocoa and Objective-C》指南,
这两本指南在iBooks里面可以下载更新喔。
-本文由翻译自Apple Swift Blog :https://developer.apple.com/swift/blog/?id=5
+-----------------
+本章节不是老码的原创,老码认真的阅读了苹果的官方博客,且自己的练习总结,如果小伙伴们费了吃奶的劲还是看不懂,请找度娘谷歌,还是看不懂请到老码[官方微博](http://weibo.com/u/5241713117)咆哮。
+
+##### 本文由翻译自Apple Swift Blog :[Access Control](https://developer.apple.com/swift/blog/?id=5)
diff --git a/source/chapter4/02_Type_Custom.md b/source/chapter4/02_Type_Custom.md
index 0c1ada34..a204a110 100644
--- a/source/chapter4/02_Type_Custom.md
+++ b/source/chapter4/02_Type_Custom.md
@@ -266,8 +266,9 @@ OCBool现在只能用bool类型初始化,而不能直接返回bool型,小火
62. println("人生最苦的事事,人死了钱没花了,人生最苦的事是,人活着,钱没了!")
63. }
-好了,到这里就到这里了,窗外的雷声叫醒了老码,现在应该去吃饭了,以上老码给大家展示了如果制造一个自己的类型,记得老码的示例是在Xcode6 Beta4下测试的,至于Beta5的改变还没有涉及,小伙伴们要好生练习,以后各种自定类型都是基于这个思想。还有这个章节不是老码的原创,老码认真的阅读了苹果的官方博客,且自己的练习总结,如果小伙伴们费了吃奶的劲还是看不懂,请找度娘谷歌,还是看不懂请到老码官方微博:http://weibo.com/u/5241713117咆哮。
+好了,到这里就到这里了,窗外的雷声叫醒了老码,现在应该去吃饭了,以上老码给大家展示了如果制造一个自己的类型,记得老码的示例是在Xcode6 Beta4下测试的,至于Beta5的改变还没有涉及,小伙伴们要好生练习,以后各种自定类型都是基于这个思想。
+-----------------
+本章节不是老码的原创,老码认真的阅读了苹果的官方博客,且自己的练习总结,如果小伙伴们费了吃奶的劲还是看不懂,请找度娘谷歌,还是看不懂请到老码[官方微博](http://weibo.com/u/5241713117)咆哮。
-
-本文由翻译自Apple Swift Blog :https://developer.apple.com/swift/blog/?id=8
+##### 本文由翻译自Apple Swift Blog :[Bool](https://developer.apple.com/swift/blog/?id=8)
diff --git a/source/chapter4/03_Ballons.md b/source/chapter4/03_Ballons.md
index 999bf0fc..9890a3a3 100644
--- a/source/chapter4/03_Ballons.md
+++ b/source/chapter4/03_Ballons.md
@@ -1,5 +1,5 @@
> 翻译:[老码团队翻译组-Arya](http://weibo.com/littlekok/)
-> 校对:[老码团队翻译组-](Jame)
+> 校对:[老码团队翻译组-Jame](http://weibo.com/u/5241713117)
# WWDC里面的那个“大炮打气球”
@@ -15,4 +15,8 @@ Ballons不但展现了playgrounds许多很赞的特性,还让我们看到写
这个playground文件用到了SpriteKit的新特性,因此需要最新beta版本的Xcode 6和Yosemite系统来支持它运行。
-本文由翻译自Apple Swift Blog的博文:[Ballons](https://developer.apple.com/swift/blog/?id=9)
+-----------------
+本章节不是老码的原创,老码认真的阅读了苹果的官方博客,且自己的练习总结,如果小伙伴们费了吃奶的劲还是看不懂,请找度娘谷歌,还是看不懂请到老码[官方微博](http://weibo.com/u/5241713117)咆哮。
+
+##### 本文由翻译自Apple Swift Blog :[Balloons](https://developer.apple.com/swift/blog/?id=9)
+
diff --git a/source/chapter4/04_Interacting_with_C_Pointers.md b/source/chapter4/04_Interacting_with_C_Pointers.md
index 587afc8b..3312baad 100644
--- a/source/chapter4/04_Interacting_with_C_Pointers.md
+++ b/source/chapter4/04_Interacting_with_C_Pointers.md
@@ -1,60 +1,89 @@
> 翻译:[老码团队翻译组-Relly](http://weibo.com/penguinliong/)
+> 校对:[老码团队翻译组-Tyrion](http://weibo.com/u/5241713117)
-# Interacting with C Pointers 与C语言指针的交互
+# Swift与C语言指针友好合作
+-----------------
+
+本页包含内容:
+
+- [用以输入/输出的参数指针](#inout-para-pointer)
+- [作为数组使用的参数指针](#array-as-para-pointer)
+- [用作字符串参数的指针](#string-as-para-pointer)
+- [指针参数转换的安全性](#security-of-pointer-cast)
Objective-C和C的API常常会需要用到指针。Swift中的数据类型都原生支持基于指针的Cocoa API,不仅如此,Swift会自动处理部分最常用的将指针作为参数传递的情况。这篇文章中,我们将着眼于在Swift中让C语言指针与变量、数组和字符串共同工作。
+
####用以输入/输出的参数指针
+
C和Objective-C并不支持多返回值,所以Cocoa API中常常将指针作为一种在方法间传递额外数据的方式。Swift允许指针被当作`inout`参数使用,所以你可以用符号`&`将对一个变量的引用作为指针参数传递。举例来说:`UIColor`中的`getRed(_:green:blue:alpha:)`方法需要四个`CGFloat*`指针来接收颜色的组成信息,我们使用`&`来将这些组成信息捕获为本地变量:
-```swift
-var r: CGFloat = 0, g: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 0
-color.getRed(&r, green: &g, blue: &b, alpha: &a)
-```
+
+####Swift代码
+
+ var r: CGFloat = 0, g: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 0
+ color.getRed(&r, green: &g, blue: &b, alpha: &a)
+
另一种常见的情况是Cocoa中`NSError`的习惯用法。许多方法会使用一个`NSError**`参数来储存可能的错误的信息。举例来说:我们用`NSFileManager`的`contentOfDirectoryAtPath(_:error:)`方法来将目录下的内容列表,并将潜在的错误指向一个`NSError?`变量:
-```swift
-var maybeError: NSError?
-if let contents = NSFileManager.defaultManager()
- .contentsOfDirectoryAtPath("/usr/bin", error: &maybeError) {
- // Work with the directory contents
-} else if let error = maybeError {
- // Handle the error
-}
-```
+
+####Swift代码
+
+ var maybeError: NSError?
+ if let contents = NSFileManager.defaultManager()
+ .contentsOfDirectoryAtPath("/usr/bin", error: &maybeError) {
+ // Work with the directory contents
+ } else if let error = maybeError {
+ // Handle the error
+ }
+
为了安全性,Swift要求被使用`&`传递的变量已经初始化。因为无法确定这个方法会不会在写入数据前尝试从指针中读取数据。
+
####作为数组使用的参数指针
+
在C语言中,数组和指针的联系十分紧密,而Swift允许数组能够作为指针使用,从而与基于数组的C语言API协同工作更加简单。一个固定的数组可以使用一个常量指针直接传递,一个变化的数组可以用`&`运算符将一个非常量指针传递。就和输入/输出参数指针一样。举例来说:我们可以用Accelerate框架中的`vDSP_vadd`方法让两个数组`a`和`b`相加,并将结果写入第三个数组`result`。
-```swift
-import Accelerate
-let a: [Float] = [1, 2, 3, 4]
-let b: [Float] = [0.5, 0.25, 0.125, 0.0625]
-var result: [Float] = [0, 0, 0, 0]
+####Swift
-vDSP_vadd(a, 1, b, 1, &result, 1, 4)
+ import Accelerate
+
+ let a: [Float] = [1, 2, 3, 4]
+ let b: [Float] = [0.5, 0.25, 0.125, 0.0625]
+ var result: [Float] = [0, 0, 0, 0]
+
+ vDSP_vadd(a, 1, b, 1, &result, 1, 4)
+
+ // 结果包含[1.5, 2.25, 3.125, 4.0625]
-// result now contains [1.5, 2.25, 3.125, 4.0625]
-```
+
+####用作字符串参数的指针
-#用作字符串参数的指针
C语言中用`cont char*`指针来作为传递字符串的基本方式。Swift中的`String`可以被当作一个无限长度UTF-8编码的`const char*`指针来传递给方法。举例来说:我们可以直接传递一个字符串给一个标准C和POSIX库方法
-```swift
-puts("Hello from libc")
-let fd = open("/tmp/scratch.txt", O_WRONLY|O_CREAT, 0o666)
-if fd < 0 {
- perror("could not open /tmp/scratch.txt")
-} else {
- let text = "Hello World"
- write(fd, text, strlen(text))
- close(fd)
-}
-```
+####swift
+
+ puts("Hello from libc")
+ let fd = open("/tmp/scratch.txt", O_WRONLY|O_CREAT, 0o666)
+
+ if fd < 0 {
+ perror("could not open /tmp/scratch.txt")
+ } else {
+ let text = "Hello World"
+ write(fd, text, strlen(text))
+ close(fd)
+ }
+
+
+####指针参数转换的安全性
-#指针参数转换的安全性
Swift很努力地使与C语言指针的交互更加便利,因为它们广泛地存在于Cocoa之中,同时保持一定的安全性。然而,相比你的其他Swift代码与C语言的指针交互具有潜在的不安全性,所以务必要小心使用。其中特别要注意:
+
- 如果被调用者为了在其返回值之后再次使用而保存了C指针的数据,那么这些转换使用起来并不安全。转换后的指针仅在调用期间保证有效。甚至你将同样的变量、数组或字符串作为多指针参数再次传递,你每次都会收到一个不同的指针。这个异常将全局或静态地储存为变量。你可以安全地将这段地址当作永久唯一的指针使用。例如:作为一个KVO上下文参数使用的时候。
- 当指针类型为`Array`或`String`时,溢出检查不是强制进行的。 基于C语言的API无法增加数组和字符串大小,所以在你将其传递到基于C语言的API之前,你必须确保数组或字符的大小正确。
-如果你需要使用基于指针的API时没有遵守以上指导,或是你重写了接受指针参数的Cocoa方法,于是你可以在Swift中直接用不安全的指针来使用未经处理的内存。在未来的文章中我们将着眼于更加高级的情况。
\ No newline at end of file
+如果你需要使用基于指针的API时没有遵守以上指导,或是你重写了接受指针参数的Cocoa方法,于是你可以在Swift中直接用不安全的指针来使用未经处理的内存。在未来的文章中我们将着眼于更加高级的情况。
+
+-----------------
+本章节不是老码的原创,老码认真的阅读了苹果的官方博客,且自己的练习总结,如果小伙伴们费了吃奶的劲还是看不懂,请找度娘谷歌,还是看不懂请到老码[官方微博](http://weibo.com/u/5241713117)咆哮。
+
+##### 本文由翻译自Apple Swift Blog :[Interacting with C Pointers](https://developer.apple.com/swift/blog/?id=6)
\ No newline at end of file
diff --git a/source/chapter4/05_Value and Reference Types.md b/source/chapter4/05_Value_and_Reference_Types.md
similarity index 51%
rename from source/chapter4/05_Value and Reference Types.md
rename to source/chapter4/05_Value_and_Reference_Types.md
index 241a8957..9508316a 100644
--- a/source/chapter4/05_Value and Reference Types.md
+++ b/source/chapter4/05_Value_and_Reference_Types.md
@@ -1,17 +1,27 @@
-Swift里的值类型与引用类型
+> 翻译:[老码团队翻译组-Arya](http://weibo.com/littlekok/)
+> 校对:[老码团队翻译组-Jame](http://weibo.com/u/5241713117)
-翻译:老码团队翻译组-Arya
+# Swift里的值类型与引用类型
+-----------------
-校对:老码团队翻译组-Jame
+本页包含内容:
-Swift里面的类型分为两种:
+- [值类型与引用类型的区别](#difference-two)
+- [Mutation(修改)在安全中扮演的角色](#act-in=mutation)
+- [如何选择类型](#how-to-choose)
+- [支持Bool类型判断](#condition-by-bool)
+- [支持兼容各们各派的类型](#support-all-type)
+- [完善OCBool的布尔基因体系](#make-up-type)
+
+### Swift里面的类型分为两种:
-* 值类型 Value Types:每个实例都保留了一分独有的数据拷贝,一般以结构体 (struct)、枚举(enum) 或者元组(tuple) 的形式出现。
-* 引用类型 Reference Type:每个实例共享同一份数据来源,一般以类(class)的形式出现。
+* **值类型(Value Types)**:每个实例都保留了一分独有的数据拷贝,一般以结构体 `(struct)`、`枚举(enum)` 或者`元组(tuple)`的形式出现。
+* **引用类型(Reference Type)**:每个实例共享同一份数据来源,一般以`类(class)`的形式出现。
在这篇博文里面,我们会介绍两种类型各自的优点,以及应该怎么选择使用。
-### 值类型与引用类型的区别
+
+#### 值类型与引用类型的区别
值类型和引用类型最基本的分别在复制之后的结果。当一个值类型被复制的时候,相当于创造了一个完全独立的实例,这个实例保有属于自己的独有数据,数据不会受到其他实例的数据变化影响:
@@ -35,29 +45,32 @@ Swift里面的类型分为两种:
println("\(x.data), \(y.data)") // 输出结果 "42, 42"
-
-### Mutation(变异)在安全中扮演的角色
+
+#### Mutation(修改)在安全中扮演的角色
值类型较引用类型来说,会让你更容易在大量代码中理清状况。如果你总是得到一个独立的拷贝出来的实例,你就可以放心它不会被你app里面的其他部分代码默默地修改。这在多线程的环境里面是尤为重要的,因为另外一个线程可能会在暗地里修改你的数据。因此可能会造成严重的程序错误,这在调试过程中非常难以排除。
由于差别主要在于修改数据的后果,那么当实例的数据只读,不存在需要更改的情况下,用哪种类型都是没有分别的。
+你可能在想,有的时候我可能也需要一个完全不变的类。这样使用`Cocoa NSObject`对象的时候会比较容易,又可以保留值语义的好处。在今天,你可以通过只使用不可变的存储属性,和避开任何可以修改状态的API,用Swift写出一个不可变类`(immutable class)`。实际上,很多基本的Cocoa类,例如`NSURL`,都是设计成不可变类的。然而,Swift语言目前只强制`struct`和`enum`这种值类型的不可变性,对类这种引用类型则没有。(例如还不支持强制将子类的限制为不可变类)
-你可能在想,有的时候我可能也需要一个完全不变的类。这样使用Cocoa NSObject对象的时候会比较容易,又可以保留值语义的好处。在今天,你可以通过只使用不可变的存储属性,和避开任何可以修改状态的API,用Swift写出一个不可变类(immutable class)。实际上,很多基本的Cocoa类,例如NSURL,都是设计成不可变类的。然而,Swift语言目前只强制struct和enum这种值类型的不可变性,对类这种引用类型则没有。(例如还不支持强制将子类的限制为不可变类)
-
-### 如何选择类型?
+
+#### 如何选择类型?
所以当我们想要建立一个新的类型的时候,怎么决定用值类型还是引用类型呢?当你使用Cocoa框架的时候,很多API都要通过NSObject的子类使用,所以这时候必须要用到引用类型class。在其他情况下,有下面几个准则:
-什么时候该用值类型:
-*要用==运算符来比较实例的数据时
-*你希望那个实例的拷贝能保持独立的状态时
-*数据会被多个线程使用时
+* **什么时候该用值类型**:
+ * 要用==运算符来比较实例的数据时
+ * 你希望那个实例的拷贝能保持独立的状态时
+ * 数据会被多个线程使用时
-什么时候该用引用类型(class):
-*要用==运算符来比较实例身份的时候
-*你希望有创建一个共享的、可变对象的时候
+* **什么时候该用引用类型(class)**:
+ * 要用==运算符来比较实例身份的时候
+ * 你希望有创建一个共享的、可变对象的时候
在Swift里面,数组(Array)、字符串(String)、字典(Dictionary)都属于值类型。它们就像C语言里面简单的int值,是一个个独立的数据个体。你不需要花任何功夫来防范其他代码在暗地里修改它们。更重要的是,你可以在线程之间安全的传递变量,而不需要特地去同步。在Swift高安全性的精神下,这个模式会帮助你用Swift写出更可控的代码。
+-----------------
+本章节不是老码的原创,老码认真的阅读了苹果的官方博客,且自己的练习总结,如果小伙伴们费了吃奶的劲还是看不懂,请找度娘谷歌,还是看不懂请到老码[官方微博](http://weibo.com/u/5241713117)咆哮。
+##### 本文由翻译自Apple Swift Blog :[Value and Reference Types](https://developer.apple.com/swift/blog/?id=10)