再版序 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-CC 到 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
內容試閱:
推荐序
让雨燕飞翔
在 2014 年 6 月之前,如果我们在 Google 中输入“Swift”进行查找,搜到的是美国创作型歌手、大美女泰勒·斯威夫特。今天我们再去做同样的检索,搜索结果是一门编程语言,这门编程语言的名字就叫作“Swift”,它的 Logo 是一只极速飞翔的雨燕。
Swift 是 Apple 公司在 2014 年 WWDC 大会上推出的一门新语言,用于在 iOSOS 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 年,春