《从零开始学Swift 第2版》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:关东升著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2017
  • ISBN:9787115450920
  • 页数:530 页
图书介绍:本书共分5部分,第一部分介绍了Swift的一些基础知识,第二部分介绍了基于Swift语言的中高级内容,第三部分主要介绍了Swift与Objective-C的混合编程,以及Swift与C/C++的混合编程等相关问题,第四部分介绍了基于Swift语言的2D游戏引擎技术,第五部分详细介绍了一个游戏App的开发过程。

第一部分 Swift语法篇 2

第1章 准备起航 2

1.1 本书约定 2

1.1.1 示例代码约定 2

1.1.2 图示约定 3

1.1.3 函数和方法签名约定 5

1.1.4 承接上一行代码约定 6

1.1.5 代码行号约定 6

1.2 Swift开发工具 7

1.2.1 Xcode开发工具 7

1.2.2 AppCode开发工具 13

1.3 本章小结 14

1.4 同步练习 14

第2章 第一个Swift程序 15

2.1 使用REPL 15

2.1.1 启动Swift REPL 15

2.1.2 使用Swift REPL 17

2.2 使用Playground 18

2.2.1 编程利器Playground 18

2.2.2 编写HelloWorld程序 19

2.3 通过Xcode创建macOS工程 23

2.3.1 创建macOS工程 23

2.3.2 编译和运行 25

2.4 使用swiftc命令 26

2.4.1 编译 26

2.4.2 运行 27

2.5 代码解释 27

2.6 本章小结 29

2.7 同步练习 29

第3章 Swift语法基础 30

3.1 标识符和关键字 30

3.1.1 标识符 30

3.1.2 关键字 31

3.2 常量和变量 33

3.2.1 常量 33

3.2.2 变量 33

3.2.3 使用var还是let 34

3.3 注释 35

3.4 表达式 36

3.5 本章小结 37

3.6 同步练习 37

第4章 运算符 39

4.1 算术运算符 39

4.1.1 一元运算符 39

4.1.2 二元运算符 40

4.1.3 算术赋值运算符 41

4.2 关系运算符 42

4.3 逻辑运算符 44

4.4 位运算符 44

4.5 其他运算符 47

4.6 本章小结 47

4.7 同步练习 48

第5章 Swift原生数据类型 50

5.1 Swift数据类型 50

5.2 整型 50

5.3 浮点型 52

5.4 数字表示方式 52

5.4.1 进制数字表示 53

5.4.2 指数表示 53

5.4.3 其他表示 53

5.5 数字类型之间的转换 54

5.5.1 整型之间的转换 54

5.5.2 整型与浮点型之间的转换 55

5.6 布尔型 55

5.7 元组类型 56

5.8 可选类型 57

5.8.1 可选类型概念 57

5.8.2 可选类型值拆包 58

5.8.3 可选绑定 59

5.9 本章小结 59

5.10 同步练习 59

第6章 Swift简介 61

6.1 字符 61

6.1.1 Unicode编码 61

6.1.2 转义符 62

6.2 创建字符串 63

6.3 可变字符串 64

6.3.1 字符串拼接 64

6.3.2 字符串插入、删除和替换 65

6.4 字符串比较 66

6.4.1 大小和相等比较 66

6.4.2 前缀和后缀比较 68

6.5 本章小结 68

6.6 同步练习 69

第7章 控制语句 70

7.1 分支语句 70

7.1.1 if语句 70

7.1.2 switch语句 72

7.1.3 guard语句 74

7.2 循环语句 77

7.2.1 while语句 77

7.2.2 repeat-while语句 78

7.2.3 for语句 79

7.3 跳转语句 80

7.3.1 break语句 80

7.3.2 continue语句 82

7.3.3 fallthrough语句 83

7.4 范围与区间运算符 85

7.4.1 switch中使用区间运算符 86

7.4.2 for中使用区间运算符 87

7.5 值绑定 88

7.5.1 if中的值绑定 88

7.5.2 guard中的值绑定 89

7.5.3 switch中的值绑定 90

7.6 where语句 91

7.6.1 switch中使用where语句 91

7.6.2 for中使用where语句 92

7.7 本章小结 92

7.8 同步练习 92

第8章 Swift原生集合类型 97

8.1 Swift中的数组集合 97

8.1.1 数组声明和初始化 98

8.1.2 可变数组 99

8.1.3 数组遍历 100

8.2 Swift中的字典集合 101

8.2.1 字典声明与初始化 102

8.2.2 可变字典 103

8.2.3 字典遍历 104

8.3 Swift中的Set集合 105

8.3.1 Set声明和初始化 106

8.3.2 可变Set集合 107

8.3.3 Set集合遍历 108

8.3.4 Set集合运算 109

8.4 本章小结 110

8.5 同步练习 110

第9章 函数 112

9.1 定义函数 112

9.2 函数参数 113

9.2.1 使用参数标签 113

9.2.2 省略参数标签 113

9.2.3 参数默认值 114

9.2.4 可变参数 114

9.2.5 值类型参数的引用传递 115

9.3 函数返回值 116

9.3.1 无返回值函数 116

9.3.2 多返回值函数 117

9.4 函数类型 117

9.4.1 作为函数返回类型使用 118

9.4.2 作为参数类型使用 119

9.5 嵌套函数 120

9.6 本章小结 121

9.7 同步练习 121

第10章 闭包 125

10.1 回顾嵌套函数 125

10.2 闭包的概念 126

10.3 使用闭包表达式 127

10.3.1 类型推断简化 127

10.3.2 隐藏return关键字 128

10.3.3 省略参数名 128

10.3.4 使用闭包返回值 129

10.4 使用尾随闭包 130

10.5 捕获上下文中的变量和常量 131

10.6 本章小结 132

10.7 同步练习 132

第11章 Swift语言中的面向对象特性 135

11.1 面向对象概念和基本特征 135

11.2 Swift中的面向对象类型 135

11.3 枚举 136

11.3.1 成员值 136

11.3.2 原始值 138

11.3.3 相关值 140

11.4 结构体与类 141

11.4.1 类和结构体定义 141

11.4.2 再谈值类型和引用类型 142

11.4.3 引用类型的比较 144

11.4.4 运算符重载 145

11.5 类型嵌套 146

11.6 可选链 147

11.6.1 可选链的概念 148

11.6.2 使用问号(?)和感叹号(!) 150

11.7 访问限定 151

11.7.1 访问范围 151

11.7.2 访问级别 152

11.7.3 使用访问级别最佳实践 154

11.8 选择类还是结构体最佳实践 157

11.8.1 类和结构体的异同 157

11.8.2 选择的原则 157

11.9 本章小结 158

11.10 同步练习 159

第12章 属性与下标 163

12.1 存储属性 163

12.1.1 存储属性概念 163

12.1.2 延迟存储属性 164

12.2 计算属性 165

12.2.1 计算属性的概念 165

12.2.2 只读计算属性 167

12.2.3 结构体和枚举中的计算属性 168

12.3 属性观察者 169

12.4 静态属性 171

12.4.1 结构体静态属性 173

12.4.2 枚举静态属性 174

12.4.3 类静态属性 175

12.5 使用下标 176

12.5.1 下标概念 176

12.5.2 示例:二维数组 176

12.6 本章小结 178

12.7 同步练习 178

第13章 方法 180

13.1 实例方法 180

13.2 可变方法 181

13.3 静态方法 182

13.3.1 结构体静态方法 183

13.3.2 枚举静态方法 183

13.3.3 类静态方法 184

13.4 本章小结 184

13.5 同步练习 185

第14章 构造与析构 186

14.1 构造函数 186

14.1.1 默认构造函数 186

14.1.2 构造函数与存储属性初始化 187

14.1.3 使用参数标签 189

14.2 构造函数重载 190

14.2.1 构造函数重载概念 190

14.2.2 结构体构造函数代理 191

14.2.3 类构造函数横向代理 192

14.3 析构函数 194

14.4 本章小结 195

14.5 同步练习 195

第15章 类继承 197

15.1 从一个示例开始 197

15.2 构造函数继承 198

15.2.1 构造函数调用规则 198

15.2.2 构造过程安全检查 200

15.2.3 构造函数继承 204

15.3 重写 206

15.3.1 重写实例属性 206

15.3.2 重写静态属性 209

15.3.3 重写实例方法 209

15.3.4 重写静态方法 211

15.3.5 下标重写 211

15.3.6 使用final关键字 213

15.4 类型检查与转换 214

15.4.1 使用is进行类型检查 216

15.4.2 使用as、as !和as?进行类型转换 217

15.4.3 使用AnyObject和Any类型 220

15.5 本章小结 221

15.6 同步练习 221

第16章 扩展 223

16.1 “轻量级”继承机制 223

16.2 声明扩展 223

16.3 扩展计算属性 224

16.4 扩展方法 226

16.5 扩展构造函数 227

16.5.1 值类型扩展构造函数 227

16.5.2 引用类型扩展构造函数 228

16.6 扩展下标 229

16.7 本章小结 230

16.8 同步练习 230

第17章 协议 231

17.1 协议概念 231

17.2 协议定义和遵从 232

17.3 协议方法 232

17.3.1 协议实例方法 232

17.3.2 协议静态方法 233

17.3.3 协议可变方法 234

17.4 协议属性 236

17.4.1 协议实例属性 236

17.4.2 协议静态属性 237

17.5 面向协议编程 238

17.5.1 协议类型 238

17.5.2 协议的继承 240

17.5.3 协议扩展 242

17.5.4 协议的合成 243

17.5.5 扩展中遵从协议 244

17.6 面向协议编程示例:表视图中使用扩展协议 245

17.7 本章小结 247

17.8 同步练习 247

第18章 泛型 249

18.1 一个问题的思考 249

18.2 泛型函数 249

18.2.1 使用泛型函数 250

18.2.2 多类型参数 251

18.3 泛型类型 251

18.4 泛型扩展 253

18.5 本章小结 254

18.6 同步练习 254

第19章 Swift编码规范 255

19.1 命名规范 255

19.2 注释规范 257

19.2.1 文件注释 257

19.2.2 文档注释 258

19.2.3 代码注释 259

19.2.4 使用地标注释 260

19.3 声明 262

19.3.1 变量或常量声明 262

19.3.2 属性声明 263

19.4 代码排版 264

19.4.1 空行 264

19.4.2 空格 265

19.4.3 断行 266

19.4.4 缩进 268

19.5 本章小结 269

19.6 同步练习 269

第二部分 进阶篇 272

第20章 Swift内存管理 272

20.1 Swift内存管理概述 272

20.1.1 引用计数 273

20.1.2 示例:Swift自动引用计数 273

20.2 强引用循环 275

20.3 打破强引用循环 279

20.3.1 弱引用 279

20.3.2 无主引用 282

20.4 闭包中的强引用循环 285

20.4.1 一个闭包中的强引用循环示例 285

20.4.2 解决闭包强引用循环 286

20.5 本章小结 288

20.6 同步练习 288

第21章 错误处理 290

21.1 Cocoa错误处理模式 290

21.2 do-try-catch错误处理模式 291

21.2.1 捕获错误 292

21.2.2 错误类型 292

21.2.3 声明抛出错误 293

21.2.4 在函数或方法中抛出错误 293

21.2.5 try?和try!的使用区别 294

21.3 案例:MyNotes应用数据持久层实现 295

21.3.1 MyNotes应用介绍 296

21.3.2 MyNotes应用数据持久层设计 296

21.3.3 实现Note实体类 297

21.3.4 NoteDAO代码实现 297

21.3.5 使用defer语句释放资源 298

21.3.6 测试示例 299

21.4 本章小结 300

21.5 同步练习 301

第22章 Foundation框架 302

22.1 数字类NSNumber 302

22.1.1 获得NSNumber对象 302

22.1.2 比较NSNumber对象 304

22.1.3 数字格式化 305

22.1.4 NSNumber与Swift原生数字类型之间的桥接 307

22.2 字符串类 307

22.2.1 NSString类 308

22.2.2 NSMutableString类 310

22.2.3 NSString与String之间的桥接 312

22.3 数组类 313

22.3.1 NSArray类 313

22.3.2 NSMutableArray类 314

22.3.3 NSArray与Swift原生数组之间的桥接 315

22.4 字典类 316

22.4.1 NSDictionary类 316

22.4.2 NSMutableDictionary类 317

22.4.3 NSDictionary与Swift原生字典之间的桥接 318

22.5 NSSet集合类 319

22.5.1 NSSet类 320

22.5.2 NSMutableSet类 321

22.5.3 NSSet与Swift原生Set之间的桥接 322

22.6 文件管理 322

22.6.1 访问目录 322

22.6.2 目录操作 323

22.6.3 文件操作 324

22.7 字节缓存 327

22.7.1 访问字节缓存 327

22.7.2 示例:Base64解码与编码 330

22.8 日期与时间 332

22.8.1 NSDate和Date 332

22.8.2 日期时间格式化 334

22.8.3 NSCalendar、Calendar、NSDateComponents和DateComponents 335

22.8.4 示例:时区转换 337

22.9 使用谓词NSPredicate过滤数据 339

22.9.1 一个过滤员工花名册的示例 339

22.9.2 使用谓词NSPredicate 341

22.9.3 NSPrdicate与集合 342

22.9.4 格式说明符 343

22.9.5 运算符 344

22.10 使用正则表达式 347

22.10.1 在NSPredicate中使用正则表达式 347

22.10.2 使用NSRegularExpression 348

22.10.3 示例:日期格式转换 350

22.11 本章小结 352

第三部分 混合编程篇 354

第23章 Swift与Objective-C混合编程 354

23.1 选择语言 354

23.2 文件扩展名 354

23.3 Swift与Objective-C API映射 355

23.3.1 构造函数映射 355

23.3.2 方法名映射 357

23.4 同一应用目标中的混合编程 360

23.4.1 什么是目标 360

23.4.2 Swift调用Objective-C 363

23.4.3 Objective-C调用Swift 366

23.5 同一框架目标中的混合编程 370

23.5.1 链接库和框架 370

23.5.2 Swift调用Objective-C 372

23.5.3 测试框架目标 376

23.5.4 Objective-C调用Swift 380

23.6 本章小结 383

第24章 Swift与C/C++混合编程 384

24.1 数据类型映射 384

24.1.1 C语言基本数据类型 384

24.1.2 C语言指针类型 385

24.2 应用目标中的混合编程 392

24.2.1 Swift调用C API 392

24.2.2 Swift调用C++API 393

24.3 框架目标中的混合编程 399

24.3.1 同一框架目标中Swift调用C或C++API 399

24.3.2 Swift调用第三方库中的C或C++API 402

24.4 案例:用SQLite嵌入式数据库实现MyNotes数据持久层 405

24.4.1 Note实体类代码 405

24.4.2 创建表 405

24.4.3 插入数据 407

24.4.4 查询数据 409

24.4.5 应用沙箱目录 411

24.4.6 表示层开发 412

24.5 本章小结 414

第四部分 游戏篇 416

第25章 SpriteKit游戏引擎 416

25.1 移动平台游戏引擎介绍 416

25.2 第一个SpriteKit游戏 416

25.2.1 创建工程 416

25.2.2 工程剖析 419

25.3 一切都是节点 426

25.3.1 节点“家族” 426

25.3.2 节点树 427

25.3.3 节点中重要的方法 428

25.3.4 节点中重要的属性 428

25.4 精灵 429

25.4.1 精灵类SKSpriteNode 429

25.4.2 案例:沙漠英雄场景 431

25.4.3 使用纹理图集性能优化 438

25.5 场景切换 441

25.5.1 场景切换方法 441

25.5.2 场景过渡动画 442

25.5.3 案例:沙漠英雄场景切换 443

25.6 动作 447

25.6.1 常用动作 447

25.6.2 组合动作 449

25.6.3 案例:帧动画实现 455

25.7 粒子系统 458

25.7.1 粒子系统属性 459

25.7.2 内置粒子系统模板 460

25.8 游戏音乐与音效 464

25.8.1 音频文件介绍 464

25.8.2 macOS和iOS平台音频优化 465

25.8.3 背景音乐 466

28.8.4 3D音效 467

25.9 物理引擎 468

25.9.1 物理引擎核心概念 469

25.9.2 物理引擎中的物体 469

25.9.3 接触与碰撞 471

25.9.4 案例:食品的接触与碰撞 472

25.10 本章小结 475

第五部分 项目实战篇 478

第26章 游戏App实战——迷失航线 478

26.1 《迷失航线》游戏分析与设计 478

26.1.1 《迷失航线》故事背景 478

26.1.2 需求分析 478

26.1.3 原型设计 479

26.1.4 游戏脚本 480

26.2 任务1:游戏工程的创建与初始化 481

26.2.1 迭代1.1 :创建工程 481

26.2.2 迭代1.2 :自定义类型维护 481

26.2.3 迭代1.3 :添加资源文件 484

26.2.4 迭代1.4 :添加粒子系统 486

26.3 任务2:创建Loading场景 486

26.3.1 迭代2.1 :设计场景 486

26.3.2 迭代2.2 :Loading动画 487

26.3.3 迭代2.3 :预处理加载纹理 488

26.4 任务3:创建Home场景 489

26.4.1 迭代3.1 :设计场景 489

26.4.2 迭代3.2 :实现代码 490

26.5 任务4:创建设置场景 493

26.5.1 迭代4.1 :设计场景 493

26.5.2 迭代4.2 :实现代码 494

26.6 任务5:创建帮助场景 497

26.6.1 迭代5.1 :设计场景 498

26.6.2 迭代5.2 :实现代码 498

26.7 任务6:实现游戏场景 499

26.7.1 迭代6.1 :设计场景 500

26.7.2 迭代6.2 :创建敌人精灵 502

26.7.3 迭代6.3 :创建玩家飞机精灵 506

26.7.4 迭代6.4 :创建子弹精灵 507

26.7.5 迭代6.5 :初始化游戏场景 508

26.7.6 迭代6.6 :玩家移动飞机 512

26.7.7 迭代6.7 :游戏循环与任务调度 513

26.7.8 迭代6.8 :游戏场景菜单实现 514

26.7.9 迭代6.9 :玩家飞机发射子弹 516

26.7.10 迭代6.1 0:子弹与敌人的碰撞检测 517

26.7.11 迭代6.1 1:玩家飞机与敌人的碰撞检测 520

26.8 任务7:游戏结束场景 521

26.8.1 迭代7.1 :设计场景 522

26.8.2 迭代7.2 :实现代码 523

26.9 还有“最后一公里” 524

26.9.1 添加图标 524

26.9.2 调整Identity和Deployment Info属性 526

29.9.3 调整程序代码 527

26.10 本章小结 528