Swift编程实战:iOS应用开发实例及完整解决方案

更多详情

内容简介: 本书完全用苹果公司的Swift编程语言进行了重写,读者在创建iOS应用时遇到的许多烦人问题,可以通过本书介绍的方法得到解决。本书使用了iOS8的SDK,读者会在本书中找到数百个全新的、改进过的知识点,包括使用健康应用数据和HomeKit配件、增强的动画和绘图、存储和保护数据、收发通知、管理文件和文件夹,等等。每节的示例代码都在Github上,读者可以立即使用。

目录: 前言 1
第1章 基础知识 9
1.0 介绍 9
1.1 为视图添加模糊效果 17
1.2 使用popover展示临时信息 20
1.3 使用UIImageView显示图片 24
1.4  使用UILabel显示静态文本 28
1.5  使用UIButton向UI中添加按钮 34
1.6  显示警告视图或者操作列表 38
1.7  使用UISwitch创建、使用、自定义开关 43
1.8  使用UIPickerView选取值 47
1.9  使用UIDatePicker选择日期或时间 51
1.10 使用UISlider实现区间滑块 55
1.11 使用UISegmentedControl实现分组的紧凑选项 59
1.12 使用UIActivityViewController显示分享选项 62
1.13 使用UIActivityViewController展示自定义分享选项 67
1.14 在导航栏上显示图片 72
1.15 使用UIBarButtonItem向导航栏添加按钮 73
1.16 使用UITextField接受用户文本输入 78
1.17 使用UITextView显示多行文本 85
1.18 使用UIScrollView创建可滚动的内容 89
1.19 使用WebKit载入网页 92
1.20 使用UIWebView载入网页 95
1.21 使用UIProgressView显示进度 98
1.22 创建配置文件 100
第2章 扩展 107
2.0 介绍 107
2.1 为照片应用添加新的照片编辑能力 110
2.2 向iOS提供自定义分享扩展 117
2.3 构建自定义键盘 126
2.4 通过操作扩展,在应用内部提供服务 132
2.5 向通知中心添加小工具 139
第3章 使用HealthKit管理健康数据 149
3.0 介绍 149
3.1 设置应用以使用HealthKit 149
3.2 获取和修改用户体重信息 152
3.3 访问和修改用户身高信息 158
3.4 获取用户特征 165
3.5 观察用户健康信息变化 169
3.6 读写用户燃烧的总卡路里值 174
3.7 单位转换 186
第4章 使用HomeKit管理家用电器 189
4.0 介绍 189
4.1 模拟HomeKit配件 191
4.2 在HomeKit中管理用户住宅 197
4.3 向用户的住宅添加房间 204
4.4 在用户住宅中指定区域 208
4.5 发现和管理支持HomeKit的配件 213
4.6 与HomeKit配件进行交互 218
4.7 对HomeKit配件进行分组 225
第5章 创建有动态交互性的用户界面 228
5.0 介绍 228
5.1 向UI组件添加重力效果 229
5.2 在UI组件之间检测并响应碰撞 231
5.3  使用推动(push)实现UI组件动画 237
5.4 对动力项目进行关联 241
5.5 向UI组件添加“跳动”效果 245
5.6 为动力特效设定特征 248
第6章 表格视图和集合视图 252
6.0 介绍 252
6.1 填充表格视图数据 253
6.2 为表格视图的单元格添加滑动删除功能 257
6.3 在表格视图中创建页眉和页脚 258
6.4 在表格视图中显示刷新控件 265
6.5 为集合视图提供基本内容 268
6.6 使用.xib 文件填充集合视图的自定义单元格 271
6.7 处理集合视图中的事件 278
6.8 为集合视图提供页眉和页脚 281
6.9 为集合视图添加自定义交互 285
第7章 并发和多任务 289
7.0 介绍 289
7.1 执行UI相关任务 292
7.2 执行非UI相关任务 294
7.3 在特定延时之后执行任务 301
7.4 对某个任务仅仅执行一次 303
7.5 将任务进行分组 305
7.6 使用操作(NSOperation)创建简单并发 307
7.7 在操作间创建依赖关系 312
7.8 触发周期性任务 314
7.9 在后台执行长时间运行的任务 317
7.10 为应用添加后台抓取功能 320
7.11 在后台中播放音频 328
7.12 在后台处理位置变化 331
7.13 在后台处理网络连接 333
第8章 安全 336
8.0 介绍 336
8.1 使用Touch ID验证用户 342
8.2 在应用中启用安全和保护功能 344
8.3 在钥匙串中存储数据 348
8.4 在钥匙串中查找值 350
8.5 更新钥匙串的已有值 353
8.6 在钥匙串中删除已有值 356
8.7 在多个应用中共享钥匙串数据 358
8.8 对iCloud中的钥匙串数据进行读写 362
8.9 在应用沙盒中安全存储文件 365
8.10 用户界面安全 368
第9章 Core Location、iBeacon和地图 370
9.0 介绍 370
9.1 检测用户在建筑中所在楼层 370
9.2 iBeacon介绍和处理 371
9.3 定位设备位置 377
9.4 在地图上显示大头针 382
9.5 在地图上添加自定义大头针 385
9.6 在地图上进行搜索 389
9.7 在地图上进行导航 394
9.8 使用摄像头自定义地图视图 400
第10章 手势识别 403
10.0 介绍 403
10.1 检测轻扫手势 405
10.2 检测旋转手势 407
10.3 检测拖曳手势 409
10.4 检测长按手势 411
10.5 检测轻击手势 414
10.6 检测捏合手势 416
10.7 检测屏幕边缘拖曳手势 418
第11章 网络与分享 420
11.0 介绍 420
11.1 使用NSURLSession下载数据 420
11.2 通过NSURLSession在后台下载数据 427
11.3 通过NSURLSession上传数据 430
11.4 通过NSURLConnection进行异步下载 432
11.5 处理异步连接中的超时 436
11.6 通过NSURLConnection同步下载 437
11.7 自定义URL请求 439
11.8 通过NSURLConnection发送HTTP请求 440
11.9 序列化和反序列化JSON对象 444
11.10 将社交分享整合到应用中 447
第12章 多媒体 451
12.0 介绍 451
12.1 播放音频文件 451
12.2 录制音频 453
12.3 播放视频文件 460
12.4 从视频文件中获取缩略图 464
12.5 访问音乐库 466
第13章 通讯录 474
13.0 介绍 474
13.1 在系统界面上获得联系人记录 476
13.2 在系统界面上获得联系人信息 479
13.3 请求访问通讯录数据库 482
13.4 获取通讯录中全部联系人 484
13.5 获取通讯录联系人的属性 486
13.6 在通讯录中插入联系人信息 489
13.7 在通讯录中插入群组 491
13.8 添加联系人到群组 493
13.9 查找通讯录 496
13.10 获取和设置通讯录联系人的图片 498
第14章 文件与文件夹管理 500
14.0 介绍 500
14.1 获得磁盘上最常用的文件夹路径 502
14.2 对文件进行读写操作 504
14.3 在磁盘中创建文件夹 508
14.4 枚举文件和文件夹 510
14.5 删除文件和文件夹 515
14.6 将对象保存到文件中 518
第15章 摄像头和照片库 521
15.0 介绍 521
15.1 侦测和探查摄像头 522
15.2 用摄像头拍摄照片 526
15.3 用摄像头拍摄视频 530
15.4 在照片库中存储照片 533
15.5 在照片库中存储视频 538
15.6 检索并获取图像和视频 540
15.7 响应图像和视频中的变化 544
15.8 编辑设备中的图像和视频 549
第16章 通知 556
16.0 介绍 556
16.1 发送通知 557
16.2 监听并响应通知 559
16.3 监听并响应键盘通知 562
16.4 安排本地通知 570
16.5 监听并响应本地通知 573
16.6 处理本地系统通知 577
16.7 为应用设置推送通知 580
16.8 向应用发送推送通知 585
16.9 响应推送通知 592
第17章 Core Data 594
17.0 介绍 594
17.1 在Core Data中执行批量更新 595
17.2 向Core Data写入数据 598
17.3 从Core Data中读取数据 600
17.4 从Core Data中删除数据 602
17.5 在Core Data中对数据排序 605
17.6 在表格视图中提升数据访问 606
17.7 在Core Data中实现关系 614
17.8 在后台获取数据 619
17.9 在Core Data模型中使用自定义数据类型 623
第18章 日期、日历和事件 628
18.0 介绍 628
18.1 构建日期对象 629
18.2 获取日期组件 630
18.3 请求日历访问权限 631
18.4 从iOS设备上获取日历组 636
18.5 向日历中添加事件 637
18.6 访问日历内容 642
18.7 从日历中删除事件 644
18.8 向日历中添加重复事件 647
18.9 获取事件的出席者 652
18.10 向日历中添加提醒 654
第19章 图形和动画 657
19.0 介绍 657
19.1 绘制文本 662
19.2 绘制图像 663
19.3 构造可变尺寸图像 667
19.4 画线 671
19.5 构造路径 677
19.6 绘制矩形 681
19.7 为形状添加阴影 684
19.8 绘制渐变 689
19.9 变换视图 694
19.10 进行视图动画 699
第20章 Core Motion 708
20.0 介绍 708
20.1 获取高度数据 709
20.2 获取计步器数据 710
20.3 侦测加速计是否可用 714
20.4 侦测陀螺仪的可用性 716
20.5 获取加速计数据 717
20.6 侦测iOS设备的摇动 720
20.7 获取陀螺仪数据 721
第21章 Cloud 724
21.0 介绍 724
21.1 在您的应用中使用CloudKit 726
21.2 使用CloudKit储存数据 730
21.3 使用CloudKit获取数据 737
21.4 使用CloudKit查询Cloud内容 743
21.5 观察CloudKit中记录的变化 748
21.6 从CloudKit中获取用户信息 756
21.7 在iCloud中储存和同步字典 762
21.8 在iCloud中创建并管理文件和文件夹 766
21.9 在iCloud中搜索文件和文件夹 769

译者序: 移动应用开发作为当今最热门的应用开发方向,已经受到全世界开发者的极大关注。一方面,在主流的移动平台iOS中,Swift语言作为这一领域的新贵,无疑会在未来几年赚足眼球。对于原有的iOS开发人员,有喜也有悲。欢喜的是,开发人员终于有了一门更加优秀、更加现代化、更加高性能的编程语言。将Swift作为武器,可以高效地开发出高质量的移动应用。悲伤的是,如果开发人员现在还不开始学习Swift,恐怕用不了多久就会被Swift带来的技术革新无情淘汰。另一方面,iOS本身也在快速地进行技术演进。不同以往,iOS 8引入和开放了许多别出心裁的新技术,如Extensions、HealthKit、HomeKit、TouchID,等等。如果开发人员能够充分利用这些新技术,就可以显著改善应用带给用户的使用体验,进而在移动应用时代取得制高点。在这个时候,我深深地体会到拥有一本优秀教材的重要性。
第一次拿到本书的原版作品时,既兴奋又倍感压力。一方面,本书既介绍了iOS,又介绍了如何用Swift进行实战,与当今的市场需求非常契合。另一方面,随着深入阅读,我深深地被原作者的睿智和才华所打动。本书的内容完整详实,书中例子尽可能追求简单,并切中要害。既可以作为教材供在校师生使用,也可以作为工具书,供一线工程师备查。如何将这样一部优秀的作品尽可能快并且尽可能高质量地呈现给国内的读者,对我们来说是一个前所未有的巨大挑战。
作为美团移动团队的成员,我们都是奋战在一线的iOS开发工程师,但是翻译图书对我们来说仍然是个巨大的挑战。首先是时间,我们需要利用业余时间和尽可能多的碎片时间进行本书的翻译工作,深夜还经常看到小伙伴们仍然在奋笔疾书。不仅如此,我还有些许忧虑,担心自己把握不好原著恰到好处的笔锋,不能有效地将这样一部优秀的作品呈现在读者面前。因此,我们对这次翻译非常用心,与几位合作者一起查阅了大量相关资料,力求做到专业词汇准确权威,将原书的精华呈现给每一位读者。
现在,我怀着期盼和忐忑的心情,将这本译著呈现给大家,渴望得到您的认可,更渴望与您成为朋友,如果您有任何问题和建议,请与我联系(liangshixing@gmail.com),让我们一起探讨,共同进步!
感谢机械工业出版社华章公司的陈佳媛老师对我们的信任与支持。感谢(美团)酒店旅游事业群负责人陈亮建立了这支充满技术热情的移动团队。感谢另外两位主要译者——我的多年好友陈作君以及团队主管赵萌——几个月以来的共同努力。感谢北京航空航天大学的宋友老师和杨思宇同学,他们为本书的定稿和审读提出了大量有建设性的宝贵意见,并做出了许多有创新性的指导工作。感谢团队其他小伙伴,郝田田、王禹华、吴卓和张杰,对本书翻译审读工作的鼎力相助。最后,还要特别感谢家人的理解与包容。
梁士兴
2016年6月于北京

前言: 译者序
移动应用开发作为当今最热门的应用开发方向,已经受到全世界开发者的极大关注。一方面,在主流的移动平台iOS中,Swift语言作为
这一领域的新贵,无疑会在未来几年赚足眼球。对于原有的iOS开发人员,有喜也有悲。欢喜的是,开发人员终于有了一门更加优秀、更加现代化、更加高性能的
编程语言。将Swift作为武器,可以高效地开发出高质量的移动应用。悲伤的是,如果开发人员现在还不开始学习Swift,恐怕用不了多久就会被
Swift带来的技术革新无情淘汰。另一方面,iOS本身也在快速地进行技术演进。不同以往,iOS
8引入和开放了许多别出心裁的新技术,如Extensions、HealthKit、HomeKit、TouchID,等等。如果开发人员能够充分利用这
些新技术,就可以显著改善应用带给用户的使用体验,进而在移动应用时代取得制高点。在这个时候,我深深地体会到拥有一本优秀教材的重要性。

一次拿到本书的原版作品时,既兴奋又倍感压力。一方面,本书既介绍了iOS,又介绍了如何用Swift进行实战,与当今的市场需求非常契合。另一方面,随
着深入阅读,我深深地被原作者的睿智和才华所打动。本书的内容完整详实,书中例子尽可能追求简单,并切中要害。既可以作为教材供在校师生使用,也可以作为
工具书,供一线工程师备查。如何将这样一部优秀的作品尽可能快并且尽可能高质量地呈现给国内的读者,对我们来说是一个前所未有的巨大挑战。

为美团移动团队的成员,我们都是奋战在一线的iOS开发工程师,但是翻译图书对我们来说仍然是个巨大的挑战。首先是时间,我们需要利用业余时间和尽可能多
的碎片时间进行本书的翻译工作,深夜还经常看到小伙伴们仍然在奋笔疾书。不仅如此,我还有些许忧虑,担心自己把握不好原著恰到好处的笔锋,不能有效地将这
样一部优秀的作品呈现在读者面前。因此,我们对这次翻译非常用心,与几位合作者一起查阅了大量相关资料,力求做到专业词汇准确权威,将原书的精华呈现给每
一位读者。
现在,我怀着期盼和忐忑的心情,将这本译著呈现给大家,渴望得到您的认可,更渴望与您成为朋友,如果您有任何问题和建议,请与我联系(liangshixing@gmail.com),让我们一起探讨,共同进步!
感谢机械工业出版社华章公司的陈佳媛老师对我们的信任与支持。感谢(美团)酒店旅游事业群负责人陈亮建立了这支充满技术热情的移动团队。感谢另外两位主
要译者——我的多年好友陈作君以及团队主管赵萌——几个月以来的共同努力。感谢北京航空航天大学的宋友老师和杨思宇同学,他们为本书的定稿和审读提出了大
量有建设性的宝贵意见,并做出了许多有创新性的指导工作。感谢团队其他小伙伴,郝田田、王禹华、吴卓和张杰,对本书翻译审读工作的鼎力相助。最后,还要特
别感谢家人的理解与包容。
梁士兴
2016年6月于北京

媒体评论: “从使用iOS的新特性进行编码到处理复杂的需求,本书总是带给我所需要的资源和优秀、清晰、有实践性的示例。现在,我开始使用Swift,本书成为我的*佳参考,没有它我会迷失。”
——Joao Duarte iOS高级软件工程师