第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.1 Swift语句概述 163
8.1.1 循环语句 163
8.1.2 分支条件语句 167
8.1.3 带标签的语句 172
8.1.4 控制传递语句 172
8.2 for循环 173
8.2.1 for-in 173
8.2.2 for条件递增 175
8.3 while循环 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.2 Swift调用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.1 Sprite 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
· · · · · · (
收起)