第1章 工欲善其事,必先利其器—— Swift语言基础 1
1.1 Swift概述 1
1.1.1 Swift的创造者 1
1.1.2 Swift的优势 2
1.2搭建开发环境 3
1.2.1 Xcode 6介绍 3
1.2.2下载并安装Xcode 6 5
1.3使用Xcode开发环境 8
1.3.1改变公司名称 8
1.3.2通过搜索框缩小文件范围 10
1.3.3格式化代码 10
1.3.4代码缩进和自动完成 11
1.3.5文件内查找和替换 12
1.3.6快速定位到代码行 14
1.3.7快速打开文件 15
1.3.8使用书签 16
1.3.9自定义导航条 17
1.3.10使用Xcode帮助 18
1.3.11调试代码 19
1.4启动iOS 8模拟器 21
第2章 千里之行,始于足下—— Swift语言基础 24
2.1第一段Swift程序 24
2.2简单值 30
2.3流程控制 31
2.4函数和闭包 34
2.5对象和类 36
2.6枚举和结构体 38
2.7协议和扩展 40
2.8泛型 41
第3章 新语言,新特性——Swift的基础语法 43
3.1分号 43
3.2空白 43
3.3标识符和关键字 44
3.3.1标识符 44
3.3.2关键字 45
3.4常量和变量 45
3.4.1声明常量和变量 45
3.4.2声明变量 46
3.4.3输出常量和变量 49
3.4.4标注类型 50
3.4.5常量和变量的命名规则 51
3.5注释 52
3.5.1注释的规则 52
3.5.2使用注释的注意事项 53
3.6数据类型 54
3.6.1数据类型的分类 55
3.6.2类型安全和类型推断 55
3.6.3类型注解 56
3.6.4类型标识符 56
3.6.5元组类型 57
3.6.6函数类型 57
3.6.7数组类型 58
3.6.8可选类型 58
3.6.9隐式解析可选类型 59
3.6.10协议合成类型 59
3.6.11元类型 60
3.6.12类型继承子句 60
3.6.13类型推断 61
3.7最基本的数值类型 61
3.7.1整数 61
3.7.2浮点数 63
3.8字面量 64
3.8.1数值型字面量 64
3.8.2整型字面量 65
3.8.3浮点型字面量 66
3.8.4文本型字面量 67
3.9数值型类型转换 68
3.9.1整数转换 68
3.9.2整数和浮点数转换 69
3.10类型别名 70
3.11布尔值 71
3.12元组 72
3.13可选类型 73
3.13.1 if语句以及强制解析 74
3.13.2可选绑定 75
3.13.3 nil 76
3.13.4隐式解析可选类型 76
3.14断言 77
3.14.1使用断言进行调试 77
3.14.2何时使用断言 78
第4章 运算符 83
4.1运算符概述 83
4.2赋值运算符 84
4.2.1基本赋值运算符 84
4.2.2复合赋值运算符 85
4.3算术运算符 86
4.3.1一元运算符 86
4.3.2二元运算符 88
4.3.3求余运算 89
4.3.4浮点数求余计算 90
4.4比较运算符(关系运算符) 91
4.5三元条件运算 93
4.6区间运算符 94
4.6.1闭区间运算符 95
4.6.2半闭区间运算符 95
4.7逻辑运算 96
4.7.1逻辑非 97
4.7.2逻辑与 97
4.7.3逻辑或 97
4.7.4组合逻辑 98
4.7.5使用括号设置运算优先级 98
4.8位运算符 99
4.8.1按位取反运算符 99
4.8.2按位与运算符 100
4.8.3按位或运算符 101
4.8.4按位异或运算符 102
4.8.5按位左移/右移运算符 103
4.9溢出运算符 107
4.10运算符函数 110
4.10.1前置和后置运算符 110
4.10.2组合赋值运算符 111
4.10.3比较运算符 112
4.11自定义运算符 113
4.12运算符的优先级和结合性 113
第5章 字符串和字符 117
5.1字符和字符串基础 117
5.2字符串字面量 118
5.3初始化空字符串 119
5.4字符串可变性 120
5.5字符串是值类型 121
5.6字符串遍历 121
5.7计算字符数量 122
5.8连接字符串和字符 123
5.9字符串插值 125
5.10比较字符串 125
5.10.1字符串相等 125
5.10.2前缀/后缀相等 125
5.10.3大写和小写字符串 127
5.11国际标准Unicode 128
5.11.1 Unicode术语 128
5.11.2字符串的Unicode表示 128
5.11.3 UTF-8 129
5.11.4 UTF-16 129
5.11.5 Unicode标量 129
第6章 表达式 132
6.1前缀表达式 132
6.2二元表达式 132
6.3赋值表达式 134
6.4三元条件运算符 135
6.5类型转换运算符 135
6.6主表达式 136
6.6.1字符型表达式 136
6.6.2 self表达式 136
6.6.3超类表达式 137
6.6.4闭包表达式 137
6.6.5隐式成员表达式 138
6.6.6圆括号表达式 138
6.6.7通配符表达式 139
6.7后缀表达式 139
6.7.1函数调用表达式 139
6.7.2初始化函数表达式 139
6.7.3显式成员表达式 140
6.7.4后缀self表达式 140
6.7.5动态表达式 140
6.7.6下标脚本表达式 141
6.7.7强制取值表达式 141
6.7.8可选链表达式 141
第7章 集合类型 143
7.1数组 143
7.1.1定义数组 143
7.1.2数组构造语句 144
7.1.3访问和修改数组 145
7.1.4数组的遍历 148
7.1.5创建并且构造一个数组 149
7.2字典 152
7.2.1字典字面量 152
7.2.2读取和修改字典 153
7.2.3字典遍历 157
7.2.4创建一个空字典 159
7.3集合的可变性 160
第8章 语句和流程控制 163
8.1Swift语句概述 163
8.1.1循环语句 163
8.1.2分支条件语句 167
8.1.3带标签的语句 172
8.1.4控制传递语句 172
8.2for循环 173
8.2.1 for-in 173
8.2.2 for条件递增 175
8.3while循环 177
8.3.1 while 177
8.3.2 do-while 179
8.4条件语句 181
8.4.1 if语句 181
8.4.2 switch 182
8.4.3不存在隐式的贯穿 183
8.4.4区间匹配 184
8.4.5元组 185
8.4.6值绑定 185
8.4.7 where 186
8.5控制转移语句 187
8.5.1 continue 187
8.5.2 break 188
8.5.3贯穿(Fallthrough) 190
8.5.4带标签的语句(Labeled Statements) 191
第9章 函数 193
9.1函数的分类 193
9.1.1从函数定义的角度划分 193
9.1.2从是否有返回值角度划分 193
9.1.3从是否有参数角度划分 194
9.1.4库函数 194
9.2函数的定义 194
9.2.1无参函数的定义 195
9.2.2有参函数的定义 195
9.3函数声明 196
9.3.1函数声明的格式 196
9.3.2声明中的参数名 197
9.3.3声明中的特殊类型参数 199
9.4函数调用 199
9.4.1调用函数的格式 199
9.4.2函数调用的方式 201
9.5函数参数 202
9.5.1多重输入参数 202
9.5.2无参函数 203
9.5.3无返回值函数 203
9.6返回值 204
9.7函数参数的名称 205
9.7.1外部参数名 206
9.7.2简写外部参数名 206
9.7.3默认参数值 207
9.7.4默认值参数的外部参数名 207
9.7.5可变参数 208
9.7.6常量参数和变量参数 208
9.7.7输入/输出参数 209
9.8函数类型 210
9.8.1使用函数类型 211
9.8.2函数类型作为参数类型 211
9.8.3函数类型作为返回类型 213
9.9嵌套函数 214
9.10函数和闭包 215
9.11内置库函数 218
第10章 闭包 225
10.1闭包表达式 225
10.1.1 sort函数 226
10.1.2闭包表达式语法 227
10.1.3根据上下文推断类型 229
10.1.4单表达式闭包隐式返回 229
10.1.5参数名称的缩写 230
10.1.6运算符函数 230
10.2闭包的简写方式 230
10.3尾随闭包 231
10.4捕获值 234
10.5闭包是引用类型 235
第11章 枚举 237
11.1枚举基础 237
11.2枚举语法 238
11.3匹配枚举值和switch语句 240
11.4相关值 241
11.5原始值 243
第12章 类 247
12.1类和结构体基础 247
12.1.1定义类和结构体 248
12.1.2声明结构体字段 249
12.2类的成员 250
12.2.1最简单的数据成员 250
12.2.2最重要的函数成员 251
12.3结构体成员 252
12.3.1字段 252
12.3.2函数 253
12.3.3属性 253
12.4类和结构体实例 254
12.5类的继承 255
12.5.1类的层次结构 255
12.5.2继承概述 256
12.5.3定义子类 257
12.5.4重写 259
12.5.5继承规则 263
12.6属性访问 265
12.7结构体和枚举是值类型 267
12.8类是引用类型 268
12.8.1恒等运算符 269
12.8.2指针 269
12.9类和结构体的选择 269
12.10集合类型的赋值和复制行为 270
12.10.1字典类型的赋值和拷贝行为 270
12.10.2数组的赋值和复制行为 271
12.10.3确保数组的唯一性 272
12.10.4判定两个数组是否共用相同元素 272
12.10.5强制复制数组 273
第13章 构造函数和析构函数 274
13.1构造函数概述 274
13.1.1结构体中的构造函数 275
13.1.2类中的构造函数 277
13.2构造过程详解 279
13.2.1为存储型属性赋初始值 280
13.2.2定制化构造过程 281
13.2.3默认构造器 283
13.2.4值类型的构造器代理 284
13.2.5类的继承和构造过程 286
13.2.6通过闭包和函数来设置属性的默认值 293
13.3析构函数 295
13.3.1析构过程原理 295
13.3.2析构函数操作 296
13.4综合演练 298
第14章 属性 308
14.1属性的种类 308
14.2常用的声明属性 308
14.3类型属性 310
14.4存储属性 310
14.4.1常量和存储属性 311
14.4.2懒惰储存属性 311
14.4.3延迟存储属性 312
14.4.4存储属性和实例变量 313
14.5计算属性 314
14.5.1基本操作 314
14.5.2 setter声明的简略写法 314
14.5.3便捷setter声明 315
14.5.4只读计算属性 315
14.6属性监视器 318
14.7全局变量和局部变量 319
14.8类型属性 320
14.8.1类型属性语法 320
14.8.2获取和设置类型属性的值 321
第15章 方法 323
15.1实例方法 323
15.1.1方法的局部参数名称和外部参数名称 324
15.1.2 self属性 325
15.1.3在实例方法中修改值类型 326
15.1.4在变异方法中给self赋值 327
15.2类型方法 328
第16章 下标脚本 331
16.1下标脚本语法 331
16.2下标脚本用法 332
16.3下标脚本选项 333
第17章 自动引用计数 338
17.1 iOS ARC的背景 338
17.2 Swift ARC的工作机制 338
17.3自动引用计数实践 339
17.4类实例之间的循环强引用 341
17.5解决实例之间的循环强引用 345
17.5.1弱引用 345
17.5.2无主引用 351
17.5.3无主引用以及隐式解析可选属性 353
17.6闭包引起的循环强引用 358
17.7解决闭包引起的循环强引用 362
17.7.1定义捕获列表 363
17.7.2弱引用和无主引用 363
第18章 泛型 365
18.1泛型所解决的问题 365
18.2泛型函数 367
18.3类型参数 368
18.4命名类型参数 371
18.5泛型类型 371
18.6类型约束 374
18.6.1类型约束语法 374
18.6.2类型约束行为 374
18.7关联类型 376
18.7.1关联类型行为 376
18.7.2扩展一个存在的类型为一指定关联类型 378
18.8 where语句 378
第19章 可选链 380
19.1可选链可替代强制解析 380
19.2为可选链定义模型类 381
19.3通过可选链调用属性 383
19.4通过可选链调用方法 383
19.5使用可选链调用子脚本 383
19.6连接多层链接 384
19.7链接可选返回值的方法 385
第20章 类型检查和嵌套类型 386
20.1定义一个类层次作为例子 386
20.2检查类型(Checking Type) 387
20.3向下转型(Downcasting) 388
20.4 Any和AnyObject的类型转换 389
20.4.1 AnyObject类型 389
20.4.2 Any类型 390
20.5嵌套类型 391
20.5.1嵌套类型实例 391
20.5.2嵌套类型的引用 392
第21章 混编开发 393
21.1在同一个工程中使用Swift和 Objective-C 393
21.1.1 Mix and Match概述 393
21.1.2在同一个应用的target中导入 394
21.1.3在同一个框架的target中导入 395
21.1.4导入外部框架 396
21.1.5在Objective-C中使用Swift 396
21.1.6实战演练Swift与Objective-C的相互调用 397
21.2Swift调用C函数 399
21.2.1调用简单的C函数 399
21.2.2增加一个C键盘输入函数 403
21.3 Swift调用C函数的综合演练 405
第22章 扩展 409
22.1扩展语法 409
22.2计算型属性 410
22.3构造器 411
22.4扩展方法 412
22.5下标 413
22.6嵌套类型 415
22.7扩展字符串截取方法 416
22.7.1演示扩展字符串的用法 416
22.7.2使用Swift String扩展截取字符串 417
22.8在iOS项目中使用扩展 419
22.9用Swift编写UITextField扩展 430
第23章 协议 438
23.1协议的语法 438
23.2对属性的规定 440
23.3对方法的规定 441
23.4对突变方法的规定 442
23.5协议类型 443
23.6委托模式 444
23.7在扩展中添加协议成员 446
23.8通过扩展补充协议声明 447
23.9集合中的协议类型 448
23.10协议的继承 448
23.11协议合成 449
23.12检验协议的一致性 449
23.13对可选协议的规定 451
第24章 Sprite Kit游戏开发 453
24.1Sprite Kit框架基础 453
24.1.1 Sprite Kit的优点和缺点 453
24.1.2 Sprite Kit、Cocos2D、Cocos2D-X和Unity的选择 453
24.2开发一个Flappy Bird游戏 454
24.3开发一个iPad飞行游戏(基于Swift) 462
24.3.1新建工程 462
24.3.2载入有云的天空的动画 462
24.3.3实现二维飞行界面 468
24.3.4生成发射子弹视图 468
24.3.5定义敌人类 469
24.4开发一个方块游戏 471