resolve conflict

This commit is contained in:
numbbbbb
2014-06-14 20:41:51 +08:00
115 changed files with 251 additions and 189 deletions

6
source/chapter1/01_swift.md Normal file → Executable file
View File

@ -4,9 +4,9 @@
# 关于 Swift
-----------------
Swift 是一种新的编程语言,用于编写 iOS 和 OS X 应用。Swift 结合了 C 和 Objective-C 的优点并且不受C兼容性的限制。Swift 采用安全的编程模式并添加了很多新特性这将使编程更简单更灵活也更有趣。Swift 是基于成熟而且倍受喜爱的 Cocoa 和 Cocoa Touch 框架,的降临将重新定义软件开发。
Swift 是一种新的编程语言,用于编写 iOS 和 OS X 应用。Swift 结合了 C 和 Objective-C 的优点并且不受 C 兼容性的限制。Swift 采用安全的编程模式并添加了很多新特性这将使编程更简单更灵活也更有趣。Swift 是基于成熟而且倍受喜爱的 Cocoa 和 Cocoa Touch 框架,的降临将重新定义软件开发。
Swift 的开发从很久之前就开始了。为了给 Swift 打好基础苹果公司改进了编译器调试器和框架结构。我们使用自动引用计数Automatic Reference Counting, ARC来简化内存管理。我们在 Foundation 和 Cocoa的基础上构建框架栈并将其标准化。Objective-C 本身支持块、集合语法和模块,所以框架可以轻松支持现代编程语言技术。正是得益于这些基础工作,我们现在才能发布这样一个用于未来苹果软件开发的新语言。
Swift 的开发从很久之前就开始了。为了给 Swift 打好基础苹果公司改进了编译器调试器和框架结构。我们使用自动引用计数Automatic Reference Counting, ARC来简化内存管理。我们在 Foundation 和 Cocoa 的基础上构建框架栈并将其标准化。Objective-C 本身支持块、集合语法和模块,所以框架可以轻松支持现代编程语言技术。正是得益于这些基础工作,我们现在才能发布这样一个用于未来苹果软件开发的新语言。
Objective-C 开发者对 Swift 并不会感到陌生。它采用了 Objective-C 的命名参数以及动态对象模型,可以无缝对接到现有的 Cocoa 框架,并且可以兼容 Objective-C 代码。在此基础之上Swift 还有许多新特性并且支持过程式编程和面向对象编程。
@ -14,4 +14,4 @@ Swift 对于初学者来说也很友好。它是第一个既满足工业标准
Swift 将现代编程语言的精华和苹果工程师文化的智慧结合了起来。编译器对性能进行了优化编程语言对开发进行了优化两者互不干扰鱼与熊掌兼得。Swift 既可以用于开发 “hello, world” 这样的小程序,也可以用于开发一套完整的操作系统。所有的这些特性让 Swift 对于开发者和苹果来说都是一项值得的投资。
Swift 编写 iOS 和 OS X 应用将是一场美妙的体验Swift 之后也会不断开发新特性和兼容性。我们对 Swift 充满信心,你还在等什么!
Swift 编写 iOS 和 OS X 应用的极佳手段,并将伴随着新的特性和功能持续演进。我们对 Swift 充满信心,你还在等什么!

39
source/chapter1/02_a_swift_tour.md Normal file → Executable file
View File

@ -7,13 +7,13 @@
本页内容包括:
- [简单值Simple Values](#simple_values)
- [控制流Control Flow](#control_flow)
- [函数和闭包Functions and Closures](#functions_and_closures)
- [对象和类Objects and Classes](#objects_and_classes)
- [枚举和结构体Enumerations and Structures](#enumerations_and_structures)
- [接口和扩展Protocols and Extensions](#protocols_and_extensions)
- [泛型Generics](#generics)
- [简单值Simple Values](#simple_values)
- [控制流Control Flow](#control_flow)
- [函数和闭包Functions and Closures](#functions_and_closures)
- [对象和类Objects and Classes](#objects_and_classes)
- [枚举和结构体Enumerations and Structures](#enumerations_and_structures)
- [协议和扩展Protocols and Extensions](#protocols_and_extensions)
- [泛型Generics](#generics)
通常来说编程语言教程中的第一个程序应该在屏幕上打印“Hello, world”。在 Swift 中,可以用一行代码实现:
@ -31,7 +31,7 @@ println("Hello, world")
<a name="simple_values"></a>
## 简单值
使用`let`来声明常量,使用`var`来声明变量。一个常量的值在编译时并不需要获取,但是你只能为它赋值一次。也就是说你可以用常量来表示这样一个值:你只需要决定一次,但是需要使用很多次。
使用`let`来声明常量,使用`var`来声明变量。一个常量的值在编译的时候,并不需要有明确的值,但是你只能为它赋值一次。也就是说你可以用常量来表示这样一个值:你只需要决定一次,但是需要使用很多次。
```swift
var myVariable = 42
@ -443,7 +443,7 @@ triangle.sideLength
2. 调用父类的构造器
3. 改变父类定义的属性值。其他的工作比如调用方法、getters和setters也可以在这个阶段完成。
如果你不需要计算属性但是需要在设置一个新值之前运行一些代码,使用`willSet``didSet`
如果你不需要计算属性但是仍然需要在设置一个新值之前或者之后运行代码,使用`willSet``didSet`
比如,下面的类确保三角形的边长总是和正方形的边长相同。
@ -607,9 +607,9 @@ case let .Error(error):
注意如何从`ServerResponse`中提取日升和日落时间。
<a name="protocols_and_extensions"></a>
## 接口和扩展
## 协议和扩展
使用`protocol`来声明一个接口
使用`protocol`来声明一个协议
```swift
protocol ExampleProtocol {
@ -618,7 +618,7 @@ protocol ExampleProtocol {
}
```
类、枚举和结构体都可以实现接口
类、枚举和结构体都可以实现协议
```swift
class SimpleClass: ExampleProtocol {
@ -643,12 +643,13 @@ b.adjust()
let bDescription = b.simpleDescription
```
> 练习:
> 写一个实现这个接口的枚举。
> 练习:
>
> 写一个实现这个协议的枚举。
注意声明`SimpleStructure`时候`mutating`关键字用来标记一个会修改结构体的方法。`SimpleClass`的声明不需要标记任何方法因为类中的方法经常会修改类。
使用`extension`来为现有的类型添加功能,比如添加一个计算属性的方法。你可以使用扩展来给任意类型添加协议,甚至是从外部库或者框架中导入的类型
使用`extension`来为现有的类型添加功能,比如新的方法和参数。你可以使用扩展来改造定义在别处,甚至是从外部库或者框架引入的一个类型,使得这个类型遵循某个协议
```swift
extension Int: ExampleProtocol {
@ -666,7 +667,7 @@ extension Int: ExampleProtocol {
>
> 给`Double`类型写一个扩展,添加`absoluteValue`功能。
你可以像使用其他命名类型一样使用接口名——例如,创建一个有不同类型但是都实现一个接口的对象集合。当你处理类型是接口的值时,接口外定义的方法不可用。
你可以像使用其他命名类型一样使用协议名——例如,创建一个有不同类型但是都实现一个协议的对象集合。当你处理类型是协议的值时,协议外定义的方法不可用。
```swift
let protocolValue: ExampleProtocol = a
@ -674,7 +675,7 @@ protocolValue.simpleDescription
// protocolValue.anotherProperty // Uncomment to see the error
```
即使`protocolValue`变量运行时的类型是`simpleClass`,编译器会把它的类型当做`ExampleProtocol`。这表示你不能调用类在它实现的接口之外实现的方法或者属性。
即使`protocolValue`变量运行时的类型是`simpleClass`,编译器会把它的类型当做`ExampleProtocol`。这表示你不能调用类在它实现的协议之外实现的方法或者属性。
<a name="generics"></a>
## 泛型
@ -704,7 +705,7 @@ var possibleInteger: OptionalValue<Int> = .None
possibleInteger = .Some(100)
```
在类型名后面使用`where`来指定一个需求列表——例如,限定实现一个协议的类型,需要限定两个类型相同,或者限定个类必须有一个特定的父类
在类型名后面使用`where`来指定对类型的需求,比如,限定类型实现一个协议限定两个类型相同,或者限定个类必须有一个特定的父类
```swift
func anyCommonElements <T, U where T: Sequence, U: Sequence, T.GeneratorType.Element: Equatable, T.GeneratorType.Element == U.GeneratorType.Element> (lhs: T, rhs: U) -> Bool {
@ -723,4 +724,4 @@ anyCommonElements([1, 2, 3], [3])
> 练习:
> 修改`anyCommonElements`函数来创建一个函数,返回一个数组,内容是两个序列的共有元素。
简单起见,你可以忽略`where`,只在冒号后面写接口或者类名。` <T: Equatable>``<T where T: Equatable>`是等价的。
简单起见,你可以忽略`where`,只在冒号后面写协议或者类名。` <T: Equatable>``<T where T: Equatable>`是等价的。

0
source/chapter1/chapter1.md Normal file → Executable file
View File