Swifter(第2版):100个Swift 2 开发必备Tip
  • 推荐0
  • 收藏0
  • 浏览323

Swifter(第2版):100个Swift 2 开发必备Tip

晁岳攀 (作者) 

  • 书  号:978-7-121-27582-1
  • 出版日期:2015-12-15
  • 页  数:264
  • 开  本:16(185*235)
  • 出版状态:上市销售
  • 维护人:张春雨
《Swifter(第2版) : 100 个 Swift 2开发必备 Tip》面向商业实战与技能进阶,内容与案例完全基于Swift 2这一全新的语言版本。作者王巍曾赴美参加Apple WWDC,亲眼见证Swift 发布,并从这门语言诞生第一分钟开始学习和钻研研。本书凝集作者数年开发功力与思考精华,总结和整理各种宝贵经验并以一个个小技巧和知识点的形式呈现。全书共100 节,每节都是一个独立主题,涵盖中高级开发人员必须知道的Swift 语言的方方面面。本书非常适合用作官方文档的参考和补充,同时也是iOS 中级开发人员不可多得的Swift 进阶读本。
□ 绝无仅有基于Swift 2的iOS开发图书
□ 国际级名企Line大牛畅销书全新升级
□ 包罗万象、荟萃精华的实战技巧大全
□ 基于新版重写全部案例及大幅优化Tip
再版序
时光匆匆,如白驹过隙。在技术革新的路上,毫不夸张地说,时间粒度是以分秒来度量的。对于一个 Apple 平台的程序员来说,WWDC 14 上我们经历了一场巨变,那就是 Swift 的横空出世。Swift 在短时间内就得到了大家的认可,无数对新技术有所追求的开发者已经开始在日常工作中使用这门富有活力的语言。在经过一年多的迭代后,Swift 迎来了一系列的进化和更新,变得更为成熟。自本书第 1 版出版至今,Swift 已经拥有了强大的开发者社区,在
GitHub 和 Stack Overflow 上每天都会有无数关于 Swift 的话题,使用 Swift 的开发者们也总结了很多关于这门语言的最佳实践。
在 WWDC 15 上,Apple 发布了 Swift 的重大更新,在 Swift 2 中,Apple 确定了面向 Protocol编程的理论,这为开发者们如何更好地使用 Swift 指明了方向。同时,新版本的 Swift 为我们提供了更安全的编码类型、更优秀的错误处理,以及更强大的 extension 等诸多语言特性,这一切都让我们在使用这门语言时能够更加得心应手。而更振奋人心的消息则是,Swift 将在年内开源,这必将为这门语言注入新的活力,开拓更为广阔的空间。在 TIOBE 语言排
行上,Swift 现在也将超过它的前辈和竞争对手——Objective-C,可以说使用 Swift 来开发Cocoa/CocoaTouch 程序已经逐渐成为业界潮流。开始学习和使用 Swift 最好的时机是一年前的 WWDC 14 之时,而次好的时机,就是当下。
本书第 1 版是基于一年前的 Swift 1 的,因为 Swift 本身的剧烈变动,有不少内容在今天看来已经过时。另外,我所在公司的 iOS 团队已经全面转向 Swift,我自己的个人项目和开源作品现在也都使用 Swift 进行构建,可以说在这一年内我个人也积累了不少新的经验,希望能够通过某种形式分享给大家。因此,这一版中将那些过时内容进行了删改,同时增加了一些对应 Swift 2 的新内容,其中就包括了这一年来的经验积累和对 Swift 2 中新特性的一些解
读。相对于第 1 版,此次将所有示例代码进行了汇总,并通过 Playground 的方式分发,方便读者查看和验证书中内容,同时也是对读者自行练习和巩固的一种鼓励。在经过对全书的重新审视和订正后,相信这一版的内容会更加切合 Swift 现在的特点,以及将来的发展方向。作为作者,我希望它能成为读者在学习 Swift 道路上的得力帮手。
最后,感谢电子工业出版社及博文视点公司,正是有了张春雨老师的帮助和鼓励,才使本书及再版成为可能。
——王巍,于 2015 年冬

推荐序
《让雨燕飞翔》
在 2014 年 6 月之前,如果我们在 Google 中输入“Swift”进行查找,搜到的是美国创作型歌手、大美女泰勒·斯威夫特。今天我们再去做同样的检索,搜索结果是一门编程语言,这门编程语言的名字就叫作“Swift”,它的 Logo 是一只极速飞翔的雨燕。
Swift 是 Apple 公司在 2014 年 WWDC 大会上推出的一门新语言,用于在 iOS/OS X 平台上开发应用程序,之前独霸这个庞大平台的语言一直是 Objective-C。可以说 Swift 是我所见过关注度最高的新语言,刚推出即万众瞩目,媒体和开发者在数天之内对 Swift 进行了集中的报道和讨论,英文手册迅速被翻译成中文,即使是谷歌 2009 年推出 Go 语言时也没有如此浩大的声势。时至今日,已经有大量的独立应用是基于 Swift 开发构建的。
2007 年之前,Objective-C 一直是 Apple 自家后院的小众语言,iOS 移动设备的爆发让这门语言的普及率获得了火箭一般的蹿升速度,截止到今天,Objective-C 在编程语言排行榜上排名第三,江湖人称三哥。Apple 一直在不遗余力地优化 Objective-C,包括把 GCC 的编译链替换成 LLVM + GCC,又替换成 LLVM + Clang,做语法简化、自动引用计数、增加 Blocks 和GCD 多线程异步处理技术……既然已经全盘掌握了 LLVM 和 Clang 技术,为什么不开发一门新语言呢?于是 Swift 语言诞生了。
Swift 的作者是天才的 70 后程序员 Chris Lattner,他同时是 LLVM 项目的主要发起人与作者之一、Clang 编译器的作者。Chris 毕业的时候正是 Apple 为了编译器焦头烂额的时候,因为Apple 之前的软件产品都依赖于整条 GCC 编译链,而开源界的大爷们并不买 Apple 的账,他们不愿意专门为了 Apple 公司的需求优化和改进 GCC 代码,所以 Apple 经过慎重的考虑后将编译器后端替换为 LLVM,并且把 Chris 招入麾下。Chris 进入了 Apple 之后如鱼得水,不
仅大幅度优化和改进 LLVM 以适应 Objective-C 的语法变革和性能要求,同时发起了 Clang项目,旨在全面替换 GCC。这个目标已经实现了,从 OS X 10.9 和 XCode 5 开始,LLVM +GCC 已经被替换成了 LLVM + Clang。
Swift 是 Chris 在 LLVM 和 Clang 之后第三个伟大的项目!
Swift是一门博采众长的现代语言,在设计的过程中,Chris参考了Objective-C、Rust、Haskell、Ruby、Python、C# 等优秀语言的特点,Swift 的语法特性最终形成。Swift 是面向 Cocoa 和Cocoa Touch 的编程语言,编译型,类型安全,生产环境的代码都需要 LLVM 编译成本地代码才能执行,但是 Swift 又具备很多动态语言的语法特性和交互方式,支持各种高级语言特性,包括闭包、泛型、面向对象、多返回值、可选变量、类型接口、元组、集合等。
很显然,这是一门准备取代 Objective-C 的编程语言,它将吸引更多的开发者加入苹果的软件生态圈,为 iOS 和 OS X 开发出更为丰富的 App。如果你是 App Store 的开发者,推荐尽早学习和掌握这门苹果力推的新语言。对于大部分新事物来说,越早介入,收获越大。
Swift 入门并不困难,Apple 公司甚至为这门语言提供了所写即所得的 Playground 功能,不仅实现了很多脚本语言支持的交互式编程,而且提供控制台输出、实时图形图像、时间线(timeline)变量跟踪等功能,开发者除了可以看到代码的实时运行结果,还能根据时间线阅读某个变量在代码片段中值的变化。这真是太棒了!另外,阅读官方提供的《The SwiftProgramming Language》也是快速入门的途径,Cocoa 开发者社区甚至在第一时间提供了高
质量的中译本。
问题的关键是入门了之后怎么办?当你读完教程学习了语法,自觉成竹在胸拔剑四顾的时候,突然发现 Swift 在实际的项目应用中会出现各种各样的问题,就像你手持一柄玄铁重剑,却无法洞悉剑诀的奥秘。如何让“雨燕”迅疾地飞翔?这就是《Swifter(第2版):100 个 Swift 2开发必备 Tip》这本书要解决的问题。
本书作者王巍是我非常尊敬的一位iOS开发者,他的网络ID是“onevcat”,大家都叫他喵神。王巍毕业于清华大学,在校期间就对 iOS 开发一往情深,曾经开发出《小熊推金币》《PomoDo》等一系列优秀的 iOS 游戏和应用。工作和开发之余,王巍也在参与 iOS 开发社区的建设,比如发起和组织翻译项目“objc 中国”,开源 Xcode 插件 VVDocumenter 项目等,这本《Swifter:100 个 Swift 开发必备 Tip》同样是他对社区的贡献之一。
王巍是一个在技术上对自己有要求的程序员,在涉及的每个领域,他都希望能够做到庖丁解牛,游刃有余。既能洞悉全局,又可直达细节。王巍 2014 年赴美参加了 Apple 的 WWDC大会。可以说,从 Swift 诞生的那一分钟起,王巍就开始学习和研究这门语言。他在自己的博文《行走于 Swift 的世界中》阐述了大量 Swift 的语法细节和底层实现机制,并对这篇文章进行了持续的更新,这篇文章在 Swift 社区获得了巨大的反响。之后,王巍持续学习 Swift语言,并进行了编程实践和项目实战,他把自己的学习心得和编程技巧进行了梳理和完善,最终形成了这本《Swifter:100 个 Swift 开发必备 Tip》。书中共有 100 个 Swift 编程技巧,几乎涵盖了 Swift 语言的所有细节,每篇独立成文,可拆可合,读者可以随时翻阅,也可以遇到实际问题后再来检索。
这本书最早的版本是电子书,我在它出版的第一时间就买了来读,之后随用随读,这本书让我对 Swift 语言有了更为深入的了解,也解决了我的团队在开发过程中的很多实际问题。所以,当获知王巍的这本书要出纸版的时候,我觉得我有责任让更多的人知道这本书。在目前这样一个知识版权认知匮乏的年代,优秀的原创作者总是值得尊敬,他们的图书作品也值得我们珍惜,我希望把这本书推荐给每一个 iOS 开发者,它值得我这么做。
目前王巍旅居日本,就职于即时通信软件公司 Line。他依然行走在修行的路上,孜孜以求创意之源。祝愿在未来的日子里,王巍能为这个世界呈现更好的软件产品和技术图书。落花无言,人淡如菊,书之岁华,其曰可读。这大概就是王巍目前的写照。作为开发者,我们要做的就是找到这个领域的灯塔,阅读、学习,然后Writethecode,Change
the world,并期待下一个收获的季节!
祝大家学得开心!
——池建强 《MacTalk·人生元编程》作者 微信平台 MacTalk 出品人 2015 年,春

第一版序
虽然我们都希望能尽快开始在 Swift 的世界里遨游,但是我觉得仍然有必要花一些时间对本书的写作目的和适合哪些读者进行必要说明。我不喜欢自吹自擂,也无法承担 “骗子” 的骂名。在知识这件严肃的事情上,我并不希望对读者
产生任何误导。作为读者,您一定想要找一本适合自己的书;而作为作者,我也希望找到自己的伯乐和子期。
为什么要写这本书
中文的科技书太少了,内容也太浅了。这是国内市场尴尬的现状,真正有技术的大牛不在少数,但他们很多并不太愿意通过出书的方式来分享他们的知识,一方面原因是回报率实在太低,另一方面是出版的流程过于烦琐。这就导致了市面上充斥着一些习惯于出版业务,但是却丝毫无视质量和素质的“流氓”作者,以及他们制造的“流水线”图书。特别是对于 Swift 语言来说,这个问题尤其严重。iOS 开发不可谓不火热,每天都有大量的开发者涌入这个平台。而 Swift 的发布更使得原本高温的市场更上一层楼。但是市面上随处可见的都是各种《××× 开发指南》《××× 权威指南》或者《21 天学会 ×××》式的中文资料。这些图书大致都是对官方文档的翻译,并没有什么实质的见解,可以说内容单一,索然无味。作为读者,很难理解作者写作的重心和目的(其实说实话,大部分情况下这类书的作者自己都不知道写作的重心和目的是什么),这样的 “为了出版而出版” 的图书可以说除了增加世界的熵以外,几乎毫无价值。
如果想要入门 Swift 语言,阅读 Apple 官方教程和文档无论从条理性和权威性来说,都是更好的选择。而中国的 Cocoa 开发者社区也以令人惊叹的速度完成了对文档的高品质翻译,这在其他任何国家都是让人眼红的一件事情。因此,如果您初学程序设计或者 Swift 语言,相比起那些“泯灭良心”(抱歉我用了这个词,希望大家不要对号入座)的 “入门书籍”,我更推荐您看这份翻译后的官方文档 1 ,这是非常珍贵的资源。说到这里,可以谈谈这本《Swifter:100 个 Swift 开发必备 Tip》的写作目的了。很多 Swift 的学习者,包括新接触 Cocoa/Cocoa Touch 开发的朋友,以及之前就使用 Objective-C 的朋友,所面临的一个共同的问题是,入门以后应该如何进一步提高。也许你也有过这样的感受:在阅读完 Apple 的教程后,觉得自己已经学会了 Swift 的语法和使用方式,你满怀信心地打开 Xcode,新建了一个 Swift 项目,想写点什么,却发现实际上不是那么回事。你需要联想Optional 应该在什么时候使用,你可能发现本已熟知的 API 突然不太确定要怎么表达,你可能遇到怎么也编译不了的问题但却不知如何改正。这些现象都非常正常,因为教程是为了展示某个语法点而写的,而几乎不涉及实际项目中应该如何使用的范例。本书的目的就是
为广大已经入门了 Swift 的开发者提供一些参考,以期能迅速提升他们在实践中的能力。因为这部分的中级内容是我自己力所能及,有自信心能写好的,也是现在广大 Swift 学习者所缺乏和急需的。
这本书是什么
本书是 Swift 语言的知识点的集合。我自己是赴美参加了 Apple 的 WWDC 14 的,也正是在这届开发者大会上,Swift 横空出世。毫不夸张地说,从 Swift 正式诞生的第一分钟开始,我就在学习这门语言。虽然天资驽钝,不得其所,但是在这段集中学习和实践的时间里,也还算总结了一些心得,而我把这些总结加以整理和示例,以一个个的小技巧和知识点的形式,编写成了这本书。全书共有 100 节,每一节都是一个相对独立的主题,涵盖了一个中高
级开发人员需要知道的 Swift 语言的方方面面。
这本书非常适合用作官方文档的参考和补充,也会是中级开发人员很喜爱的 Swift 进阶读本。具体每节的内容,可以参看本书的目录。
这本书不是什么
这本书不是 Swift 的入门教程,也不会通过具体的完整实例引导你用 Swift 开发出一个像是计算器或者记事本这样的 app。这本书的目的十分纯粹,就是探索那些不太被人注意,但是又在每天的开发中可能经常用到的 Swift 特性。这本书并不会系统地介绍 Swift 的语法和特性,因为基于本书的写作目的和内容特点,采用松散的模式和非线性的组织方式会更加适合。换言之,如果你是想找一本 Swift 从零开始的书,那这本书不应该是你的选择。你可以在阅读 Apple 文档后再考虑回来看这本书。
组织形式和推荐阅读方式
100 个 Tip 其实不是一个小数目。本书每节的内容是相对独立的,也就是说你没有必要从头开始看,随手翻开到任何一节都是没问题的。当然,按顺序看是最理想的阅读方式,因为在写作时我特别注意了让靠前的节不涉及后面节的内容;另一方面,位置靠后的节如果涉及之前节的内容的话,我添加了相关节的交叉引用,这可以帮助迅速复习和回顾之前的内容。我始终坚信不断地重复和巩固,是真正掌握知识的唯一途径。您可以通过目录快速地在不同节之间选择自己感兴趣或需要了解的内容。如果遇到您不感兴趣或者已经熟知的节,您也完全可以暂时先跳过去,这不会影响您对本书的阅读和理解。建议您阅读本书时开启 Xcode 环境,并且对每一节中的代码进行验证,这有利于您真正理
解代码示例想表达的意思,也有利于记忆的形成。每一段代码示例都不太长,却经过了精心的准备,能很好地说明本节内容,希望您在每一处都能通过代码和我进行心灵上的 “对话”。
代码运行环境
书中每一节基本都配有代码示例的说明。这些代码一般来说包括 Objective-C 或者 Swift 的代码。理论上来说所有代码都可以在 Swift (也就是 Xcode)当前版本环境下运行。当然因为Swift 版本变化很快,可能部分代码需要微调或者结合一定的上下文环境才能运行,但我相信这种调整是显而易见的。如果您发现明显的代码错误和无法运行的情况,欢迎随时与我联系,我将尽快修正。
如果没有特别说明,这些代码在 Playground 和项目中都应该可以运行,并拥有同样表现。但是也存在一些代码只能在 Playground 或者项目文件中才能正确工作的情况,这主要是因为平台限制的因素,如果出现这种情况,我都会在相关节中特别加以说明。
勘误和反馈
Swift 仍然在高速发展中,随着 Swift 的新特性引入及错误修正,本书难免会存在部分错误或者过时的情况。虽然我会随着 Swift 的发展继续不断完善和修正这本书,但是这个过程亦需要时间。
另外由于作者水平有限,书中也难免会出现一些错误或者纰漏,如果您在阅读时发现了任何问题,可以直接向我反馈,我将尽快确认和修正。
致谢与提醒
首先想感谢您购买了这本书。我其实是怀着忐忑的心情写下这些文字的,小心翼翼地希望没有触动太多人。这本书所提供的知识我想应该是超过它的售价的,但在选择前还是请您再三考虑。

目录

再版序 iii
推荐序 iv
序 vii
I Swift 新元素 1
Tip 1. 柯里化 (Currying) 2
Tip 2. 安全的资源组织方式 4
Tip 3. 将 protocol 的方法声明为 mutating 6
Tip 4. Sequence 7
Tip 5. 多元组(Tuple) 9
Tip 6. @autoclosure 和?? 11
Tip 7. Optional Chaining 14
Tip 8. 操作符 16
Tip 9. func 的参数修饰 19
Tip 10. 字面量转换 21
Tip 11. 下标 25
Tip 12. 方法嵌套 27
Tip 13. 命名空间 30
Tip 14. Any 和 AnyObject 32
Tip 15. typealias 和泛型接口 35
Tip 16. 可变参数函数 37
Tip 17. 初始化方法顺序 39
Tip 18. Designated,Convenience 和 Required 41
Tip 19. 初始化返回 nil 44
Tip 20. protocol 组合 47
Tip 21. static 和 class 51
Tip 22. 多类型和容器 54
Tip 23. default 参数 57
Tip 24. 正则表达式 59
Tip 25. 模式匹配 62
Tip 26. … 和..< 65
Tip 27. AnyClass、元类型和.self 67
Tip 28. 接口和类方法中的 Self 70
Tip 29. 动态类型和多方法 73
Tip 30. 属性观察 75
Tip 31. final 78
Tip 32. lazy 修饰符和 lazy 方法 81
Tip 33. Reflection 和 Mirror 84
Tip 34. 隐式解包 Optional 87
Tip 35. 多重 Optional 89
Tip 36. Optional Map 91
Tip 37. Protocol Extension 93
Tip 38. where 和模式匹配 98
Tip 39. indirect 和嵌套 enum 101
II 从 Objective-C/C 到 Swift 103
Tip 40. Selector 104
Tip 41. 实例方法的动态调用 106
Tip 42. 单例 108
Tip 43. 条件编译 111
Tip 44. 编译标记 113
Tip 45. @UIApplicationMain 115
Tip 46. @objc 和 dynamic 117
Tip 47. 可选接口和接口扩展 120
Tip 48. 内存管理,weak 和 unowned 122
Tip 49. @autoreleasepool 127
Tip 50. 值类型和引用类型 130
Tip 51. String 还是 NSString 132
Tip 52. UnsafePointer 134
Tip 53. C 指针内存管理 137
Tip 54. COpaquePointer 和 C convention 139
Tip 55. GCD 和延时调用 141
Tip 56. 获取对象类型 145
Tip 57. 自省 147
Tip 58. KVO 149
Tip 59. 局部 scope 152
Tip 60. 判等 155
Tip 61. 哈希 158
Tip 62. 类簇 160
Tip 63. Swizzle 162
Tip 64. 调用 C 动态库 165
Tip 65. 输出格式化 167
Tip 66. Options 169
Tip 67. 数组 enumerate 171
Tip 68. 类型编码 @encode 173
Tip 69. C 代码调用和 @asmname 175
Tip 70. sizeof 和 sizeofValue 177
Tip 71. delegate 179
Tip 72. Associated Object 181
Tip 73. Lock 183
Tip 74. Toll-Free Bridging 和 Unmanaged 185
III Swift 与开发环境及一些实践 189
Tip 75. Swift 命令行工具 190
Tip 76. 随机数生成 192
Tip 77. print 和 debugPrint 194
Tip 78. 错误和异常处理 196
Tip 79. 断言 203
Tip 80. fatalError 205
Tip 81. 代码组织和 Framework 208
Tip 82. Playground 延时运行 212
Tip 83. Playground 可视化 214
Tip 84. Playground 与项目协作 216
Tip 85. 数学和数字 218
Tip 86. JSON 220
Tip 87. NSNull 222
Tip 88. 文档注释 224
Tip 89. 性能考虑 226
Tip 90. Log 输出 228
Tip 91. 溢出 230
Tip 92. 宏定义 define 232
Tip 93. 属性访问控制 234
Tip 94. Swift 中的测试 236
Tip 95. Core Data 238
Tip 96. 闭包歧义 240
Tip 97. 泛型扩展 244
Tip 98. 兼容性 246
Tip 99. 列举 enum 类型 248
Tip 100. 尾递归 251
后记及致谢 253

读者评论

相关图书

谁说菜鸟不会数据分析(R语言篇)

姚新军 罗应婷 (作者)

本书从解决工作实际问题出发,提炼并总结工作中R 语言常用的数据处理、数据分析实战方法与技巧。本书力求通俗易懂地介绍相关知识,在不影响学习和理解的前提下,尽可能地...

¥69.00

跟戴铭学iOS编程:理顺核心知识点

戴铭 (作者)

本书针对 iOS 应用开发涉及的核心知识点进行详细剖析,分为 Swift、编译器、iOS 中的大前端技术三大章,从应用、进阶、未来三方面全方位剖析 iOS 开发...

¥55.30

iOS UI开发捷径——利用Interface Builder高效、优雅地开发UI

郭晓亮 (作者)

这是一本详细讲解如何使用 Interface Builder 的书籍,主要讲解如何利用 Interface Builder<br>快速、高效地开发 UI。本书从...

¥69.00

App Inventor 2 Android应用开发实务:正确学会App Inventor开发技巧的16堂课

白乃遠、曾奕霖 (作者) 白乃远 曾奕霖 (译者)

在App Inventor 2 中,只需采用简单的拖、拉、放三个基本动作,就能以拼图式的方式构建应用程序。<br>全新进化的云端编辑模式,无论身在何处,只需打开...

¥69.00

iOS动画——核心技术与案例实战

郑微 (作者)

目前,APP Store上的应用已经超过150万个,而纵观排名较为靠前的应用,无一例外都有着一个共同的特点,那就是良好的用户体验。动画作为用户体验中最复杂、最绚...

¥69.00

iOS 应用安全权威指南

David Thiel (作者) 程伟 (译者)

对于所有希望保护用户免受恶意攻击的开发者来说,消除iOS 应用当中的安全漏洞至关重要。在本书中,移动端安全专家David Thiel 向你揭示了那些会导致严重安...

¥69.00