内容简介 · · · · · ·
O’Reilly Media通过图书、杂志、在线服务、调查研究和会议等方式传播创新知识。自1978年开始,O’Reilly一直都是前沿发展的见证者和推动者。超级极客们正在开创着未来,而我们关注真正重要的技术趋势——通过放大那些“细微的信号”来刺激社会对新科技的应用。作为技术社区中活跃的参与者,O’Reilly的发展充满了对创新的倡导、创造和发扬光大。
O’Reilly为软件开发人员带来革命性的“动物书”;创建第一个商业网站(GNN);组织了影响深远的开放源代码峰会,以至于开源软件运动以此命名;创立了Make杂志,从而成为DIY革命的主要先锋;公司一如既往地通过多种形式缔结信息与人的纽带。O’Reilly的会议和峰会集聚了众多超级极客和高瞻远瞩的商业领袖,共同描绘出开创新产业的革命性思想。作为技术人士获取信息的选择,O’Reilly现在还将先锋专家的知识传递给普通的计算机用户。无论是通过书籍出版,在线服务或者面授课程,每一项O’Reilly的产品都反映了公司不可动摇的理念——信息是激发创新的力量。
目录 · · · · · ·
第一部分 语言
第1章 Swift架构纵览 11
1.1 基础 11
1.2 万物皆对象 12
1.3 对象类型的3种风格 14
1.4 变量 14
1.5 函数 15
1.6 Swift文件的结构 16
1.7 作用域与生命周期 19
1.8 对象成员 20
1.9 命名空间 20
1.10 模块 21
1.11 实例 22
1.12 为何使用实例 24
1.13 self 26
1.14 隐私 27
1.15 设计 29
1.15.1 对象类型与API 29
1.15.2 实例创建、作用域与生命周期 31
1.15.3 小结 32
第2章 函数 34
2.1 函数参数与返回值 34
2.1.1 Void返回类型与参数 37
2.1.2 函数签名 38
2.2 外部参数名 38
2.3 重载 41
2.4 默认参数值 42
2.5 可变参数 43
2.6 可忽略参数 44
2.7 可修改参数 44
2.8 函数中的函数 48
2.9 递归 49
2.10 将函数作为值 50
2.11 匿名函数 53
2.12 定义与调用 57
2.13 闭包 58
2.13.1 闭包是如何改善代码的 59
2.13.2 返回函数的函数 61
2.13.3 使用闭包设置捕获变量 64
2.13.4 使用闭包保存捕获的环境 64
2.14 柯里化函数 66
第3章 变量与简单类型 68
3.1 变量作用域与生命周期 68
3.2 变量声明 69
3.3 计算初始化器 72
3.4 计算变量 73
3.5 setter观察者 76
3.6 延迟初始化 77
3.7 内建简单类型 79
3.7.1 Bool 80
3.7.2 数字 81
3.7.3 String 88
3.7.4 Character 93
3.7.5 Range 96
3.7.6 元组 98
3.7.7 Optional 102
第4章 对象类型 114
4.1 对象类型声明与特性 114
4.1.1 初始化器 115
4.1.2 属性 122
4.1.3 方法 125
4.1.4 下标 127
4.1.5 嵌套对象类型 128
4.1.6 实例引用 129
4.2 枚举 131
4.2.1 带有固定值的Case 132
4.2.2 带有类型值的Case 133
4.2.3 枚举初始化器 134
4.2.4 枚举属性 136
4.2.5 枚举方法 137
4.2.6 为何使用枚举 138
4.3 结构体 139
4.3.1 结构体初始化器、属性与方法 139
4.3.2 将结构体作为命名空间 140
4.4 类 141
4.4.1 值类型与引用类型 142
4.4.2 子类与父类 146
4.4.3 类初始化器 151
4.4.4 类析构器 159
4.4.5 类属性与方法 159
4.5 多态 161
4.6 类型转换 164
4.7 类型引用 168
4.8 协议 172
4.8.1 为何使用协议 174
4.8.2 协议类型测试与转换 176
4.8.3 声明协议 177
4.8.4 可选协议成员 178
4.8.5 类协议 180
4.8.6 隐式必备初始化器 180
4.8.7 字面值转换 182
4.9 泛型 183
4.9.1 泛型声明 185
4.9.2 类型约束 186
4.9.3 显式特化 189
4.9.4 关联类型链 190
4.9.5 附加约束 192
4.10 扩展 196
4.10.1 扩展对象类型 196
4.10.2 扩展协议 199
4.10.3 扩展泛型 202
4.11 保护类型 203
4.11.1 AnyObject 203
4.11.2 AnyClass 206
4.11.3 Any 207
4.12 集合类型 208
4.12.1 Array 208
4.12.2 Dictionary 222
4.12.3 Set 227
第5章 流程控制与其他 232
5.1 流程控制 232
5.1.1 分支 233
5.1.2 循环 245
5.1.3 跳转 250
5.2 运算符 261
5.3 隐私性 264
5.3.1 Private声明 265
5.3.2 Public声明 267
5.3.3 隐私性规则 267
5.4 内省 267
5.5 内存管理 269
5.5.1 弱引用 270
5.5.2 无主引用 272
5.5.3 匿名函数中的弱引用与无主引用 273
5.5.4 协议类型引用的内存管理 275
第二部分 IDE
第6章 Xcode项目剖析 279
6.1 新建项目 279
6.2 项目窗口 281
6.2.1 导航窗格 282
6.2.2 辅助窗格 288
6.2.3 编辑器 289
6.3 项目文件及其依赖 291
6.4 目标 293
6.4.1 构建阶段 294
6.4.2 构建设置 296
6.4.3 配置 297
6.4.4 方案与目标 298
6.5 从项目到运行应用 300
6.5.1 构建设置 303
6.5.2 属性列表设置 303
6.5.3 nib文件 304
6.5.4 其他资源 305
6.5.5 代码文件与应用启动过程 307
6.5.6 框架与SDK 312
6.6 对项目内容进行重命名 314
第7章 nib管理 316
7.1 nib编辑器界面概览 317
7.1.1 文档大纲 318
7.1.2 画布 321
7.1.3 查看器与库 323
7.2 nib加载 324
7.2.1 何时加载nib 325
7.2.2 手工加载nib 326
7.3 连接 328
7.3.1 插座变量 328
7.3.2 nib拥有者 330
7.3.3 自动配置nib 333
7.3.4 误配置的插座变量 333
7.3.5 删除插座变量 335
7.3.6 创建插座变量的其他方式 335
7.3.7 插座变量集合 338
7.3.8 动作连接 339
7.3.9 创建动作的其他方式 340
7.3.10 误配置的动作 342
7.3.11 nib之间的连接——不行! 342
7.4 nib实例的其他配置 343
第8章 文档 346
8.1 文档窗口 346
8.2 类文档页面 349
8.3 示例代码 351
8.4 快速帮助 352
8.5 符号 353
8.6 头文件 354
8.7 互联网资源 355
第9章 项目的生命周期 356
9.1 设备架构与条件代码 356
9.1.1 向后兼容 357
9.1.2 设备类型 359
9.2 版本控制 360
9.3 编辑与代码导航 362
9.3.1 自动补令 363
9.3.2 代码片段 364
9.3.3 Fix-it与实时语法检查 365
9.3.4 导航 366
9.3.5 查找 368
9.4 在模拟器中运行 369
9.5 调试 370
9.5.1 原始调试 370
9.5.2 Xcode调试器 372
9.6 测试 378
9.7 清理 383
9.8 在设备中运行 384
9.8.1 在没有开发者计划成员资格的情况下运行 386
9.8.2 获取开发者计划成员资格 387
9.8.3 获取证书 387
9.8.4 获取开发配置文件 389
9.8.5 运行应用 390
9.8.6 配置文件与设备管理 390
9.9 分析 391
9.9.1 仪表盘 391
9.9.2 Instruments 392
9.10 本地化 394
9.10.1 本地化Info.plist 396
9.10.2 本地化nib文件 398
9.10.3 本地化代码字符串 399
9.10.4 使用XML文件进行本地化 401
9.11 归档与发布 403
9.12 Ad Hoc发布 405
9.13 最后的准备 406
9.13.1 应用图标 407
9.13.2 其他图标 408
9.13.3 启动图片 408
9.13.4 屏幕截图与视频预览 409
9.13.5 属性列表设置 410
9.14 向App Store提交应用 411
第三部分 Cocoa
第10章 Cocoa类 417
10.1 子类化 417
10.2 类别与扩展 420
10.2.1 Swift如何使用扩展 420
10.2.2 你应该如何使用扩展 421
10.2.3 Cocoa如何使用类别 421
10.3 协议 423
10.3.1 非正式协议 425
10.3.2 可选方法 425
10.4 Foundation类精讲 427
10.4.1 常用的结构体与常量 427
10.4.2 NSString及相关类 428
10.4.3 NSDate及相关类 431
10.4.4 NSNumber 433
10.4.5 NSValue 434
10.4.6 NSData 435
10.4.7 相等与比较 435
10.4.8 NSIndexSet 437
10.4.9 NSArray与NSMutableArray 438
10.4.10 NSDictionary与NSMutableDictionary 440
10.4.11 NSSet及相关类 440
10.4.12 NSNull 442
10.4.13 不变与可变 442
10.4.14 属性列表 443
10.5 访问器、属性与键值编码 443
10.5.1 Swift访问器 445
10.5.2 键值编码 446
10.5.3 键值编码的使用 447
10.5.4 KVC与插座变量 448
10.5.5 键路径 449
10.5.6 数组访问器 450
10.6 NSObject揭秘 450
第11章 Cocoa事件 453
11.1 为何使用事件 453
11.2 子类化 454
11.3 通知 455
11.3.1 接收通知 456
11.3.2 取消注册 458
11.3.3 发布通知 459
11.3.4 NSTimer 460
11.4 委托 461
11.4.1 Cocoa委托 461
11.4.2 实现委托 463
11.5 数据源 465
11.6 动作 465
11.7 响应器链 468
11.7.1 推迟职责 469
11.7.2 Nil-Targeted动作 470
11.8 键值观测 471
11.9 事件泥潭 475
11.10 延迟执行 477
第12章 内存管理 480
12.1 Cocoa内存管理的原理 480
12.2 Cocoa内存管理的原则 481
12.3 ARC及其作用 482
12.4 Cocoa对象管理内存的方式 483
12.5 自动释放池 484
12.6 实例属性的内存管理 486
12.7 保持循环与弱引用 487
12.8 值得注意的内存管理情况 488
12.9 nib加载与内存管理 492
12.10 CFTypeRefs的内存管理 493
12.11 属性的内存管理策略 495
12.12 调试内存管理的错误 497
第13章 对象间通信 499
13.1 实例化可见性 500
13.2 关系可见性 502
13.3 全局可见性 503
13.4 通知与KVO 504
13.5 模型-视图-控制器 505
附录A C、Objective-C与Swift 507