logo资料库

siwfter-tips.pdf

第1页 / 共248页
第2页 / 共248页
第3页 / 共248页
第4页 / 共248页
第5页 / 共248页
第6页 / 共248页
第7页 / 共248页
第8页 / 共248页
资料共248页,剩余部分请下载后查看
介绍
Swift 新元素
柯里化 (Currying)
将 protocol 的方法声明为 mutating
Sequence
tuple
@autoclosure 和 ??
@escaping
Optional Chaining
操作符
func 的参数修饰
字面量表达
下标
方法嵌套
命名空间
typealias
associatedtype
可变参数函数
初始化方法顺序
Designated,Convenience 和 Required
初始化返回 nil
static 和 class
多类型和容器
default 参数
正则表达式
模式匹配
... 和 ..<
AnyClass,元类型和 .self
协议和类方法中的 Self
动态类型和多方法
属性观察
final
lazy 修饰符和 lazy 方法
Reflection 和 Mirror
隐式解包 Optional
多重 Optional
Optional Map
Protocol Extension
where 和模式匹配
indirect 和嵌套 enum
从 Objective-C/C 到 Swift
Selector
实例方法的动态调用
单例
条件编译
编译标记
@UIApplicationMain
@objc 和 dynamic
可选协议和协议扩展
内存管理,weak 和 unowned
@autoreleasepool
值类型和引用类型
String 还是 NSString
UnsafePointer
C 指针内存管理
COpaquePointer 和 C convention
GCD 和延时调用
获取对象类型
自省
KeyPath 和 KVO
局部 scope
判等
哈希
类簇
调用 C 动态库
输出格式化
Options
数组 enumerate
类型编码 @encode
C 代码调用和 @asmname
delegate
Associated Object
Lock
Toll-Free Bridging 和 Unmanaged
Swift 与开发环境及一些实践
Swift 命令行工具
随机数生成
print 和 debugPrint
错误和异常处理
断言
fatalError
代码组织和 Framework
安全的资源组织方式
Playground 延时运行
Playground 与项目协作
Playground 可视化开发
数学和数字
JSON 和 Codable
NSNull
文档注释
性能考虑
Log 输出
溢出
宏定义 define
属性访问控制
Swift 中的测试
Core Data
闭包歧义
泛型扩展
兼容性
列举 enum 类型
尾递归
后记
版本更新
Table of Contents 介绍 Swift 新元素 柯⾥化 (Currying) 将 protocol 的⽅法声明为 mutating Sequence tuple @autoclosure 和 ?? @escaping Optional Chaining 操作符 func 的参数修饰 字⾯量表达 下标 ⽅法嵌套 命名空间 typealias associatedtype 可变参数函数 初始化⽅法顺序 Designated,Convenience 和 Required 初始化返回 nil static 和 class 多类型和容器 default 参数 正则表达式 模式匹配 ... 和 ..< AnyClass,元类型和 .self 协议和类⽅法中的 Self 动态类型和多⽅法 1.1 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 2
属性观察 final lazy 修饰符和 lazy ⽅法 Reflection 和 Mirror 隐式解包 Optional 多重 Optional Optional Map Protocol Extension where 和模式匹配 indirect 和嵌套 enum 从 Objective-C/C 到 Swift Selector 实例⽅法的动态调⽤ 单例 条件编译 编译标记 @UIApplicationMain @objc 和 dynamic 可选协议和协议扩展 内存管理,weak 和 unowned @autoreleasepool 值类型和引⽤类型 String 还是 NSString UnsafePointer C 指针内存管理 COpaquePointer 和 C convention GCD 和延时调⽤ 获取对象类型 ⾃省 KeyPath 和 KVO 局部 scope 判等 哈希 1.2.29 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 1.3.18 1.3.19 1.3.20 1.3.21 1.3.22 3
类簇 调⽤ C 动态库 输出格式化 Options 数组 enumerate 类型编码 @encode C 代码调⽤和 @asmname delegate Associated Object Lock Toll-Free Bridging 和 Unmanaged Swift 与开发环境及⼀些实践 Swift 命令⾏⼯具 随机数⽣成 print 和 debugPrint 错误和异常处理 断⾔ fatalError 代码组织和 Framework 安全的资源组织⽅式 Playground 延时运⾏ Playground 与项⽬协作 Playground 可视化开发 数学和数字 JSON 和 Codable NSNull ⽂档注释 性能考虑 Log 输出 溢出 宏定义 define 属性访问控制 Swift 中的测试 1.3.23 1.3.24 1.3.25 1.3.26 1.3.27 1.3.28 1.3.29 1.3.30 1.3.31 1.3.32 1.3.33 1.4 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.4.10 1.4.11 1.4.12 1.4.13 1.4.14 1.4.15 1.4.16 1.4.17 1.4.18 1.4.19 1.4.20 1.4.21 4
Core Data 闭包歧义 泛型扩展 兼容性 列举 enum 类型 尾递归 后记 版本更新 1.4.22 1.4.23 1.4.24 1.4.25 1.4.26 1.4.27 1.5 1.6 5
介绍 介绍 虽然我们都希望能尽快开始在 Swift 的世界⾥遨游,但是我觉得仍然有必要花⼀些时间将本 书的写作⽬的和适合哪些读者进⾏必要说明。我不喜欢⾃吹⾃擂,也⽆法承担“骗⼦”的骂 名。在知识这件严肃的事情上,我并不希望对读者产⽣任何的误导。作为读者,您⼀定想 要找的是⼀本合适⾃⼰的书;⽽作为作者,我也希望找到⾃⼰的伯乐和⼦期。 为什么要写这本书 中⽂的科技书籍太少了,内容也太浅了。这是国内市场尴尬的现状:真正有技术的⼤⽜不在少 数,但他们很多并不太愿意通过出书的⽅式来分享他们的知识:⼀⽅⾯是回报率实在太低,另⼀ ⽅⾯是出版的流程过于繁琐。这就导致了市⾯上充斥了⼀些习惯于出版业务,但是却丝毫⽆视质 量和素质的流氓作者和图书。 特别是对于 Swift 语⾔来说,这个问题尤其严重。iOS 开发不可谓不⽕热,每天都有⼤量的开发者 涌⼊这个平台。⽽ Swift 的发布更使得原本⾼温的市场更上⼀层楼。但是市⾯上随处可⻅的都是各 种《开发指南》《权威指南》或者《21天学会XXX》系列的中⽂资料。这些图书⼤致都是对官⽅ ⽂档的翻译,并没有什么实质的⻅解,可以说内容单⼀,索然⽆味。作为读者,很难理解作者写 作的重⼼和⽬的 (其实说实话,⼤部分情况下这类书的作者⾃⼰都不知道写作的重⼼和⽬的是什 么),这样的“为了出版⽽出版”的图书可以说除了增加世界的熵以外,⼏乎毫⽆价值。 如果想要⼊⻔ Swift 语⾔,阅读 Apple 官⽅教程和⽂档⽆论从条理性和权威性来说,都是更好的 选择。⽽中国的 Cocoa 开发者社区也以令⼈惊叹的速度完成了对⽂档的⾼品质翻译,这在其他任 何国家都是让⼈眼红的⼀件事情。因此,如果您是初学程序设计或者 Swift 语⾔,相⽐起那些泯灭 良⼼ (抱歉我⽤了这个词,希望⼤家不要对号⼊座) 的“⼊⻔书籍”,我更推荐您看这份翻译后的官 ⽅⽂档,这是⾮常珍惜和宝贵的资源。 说到这⾥,可以谈谈这本《Swifter - Swift 必备 tips》的写作⽬的了。很多 Swift 的学习者 -- 包括 新接触 Cocoa/Cocoa Touch 开发的朋友,以及之前就使⽤ Objective-C 的朋友 -- 所共同⾯临的⼀ 个问题是,⼊⻔以后应该如何进⼀步提⾼。也许你也有过这样的感受:在阅读完 Apple 的教程 后,觉得⾃⼰已经学会了 Swift 的语法和使⽤⽅式,你满怀信⼼地打开 Xcode,新建了⼀个 Swift 项⽬,想写点什么,却发现实际上满不是那么回事。你需要联想 Optional 应该在什么时候使⽤, 你可能发现本已熟知 API 突然不太确定要怎么表达,你可能遇到怎么也编译不了的问题但却不知 如何改正。这些现象都⾮常正常,因为教程是为了展示某个语法点⽽写的,⽽⼏乎不涉及实际项 ⽬中应该如何使⽤的范例。本书的⽬的就是为⼴⼤已经⼊⻔了 Swift 的开发者提供⼀些参考,以期 能迅速提升他们在实践中的能⼒。因为这部分的中级内容是我⾃⼰⼒所能及,有⾃信⼼能写好 的;也是现在⼴⼤ Swift 学习者所急缺和需要的。 这本书是什么 6
介绍 本书是 Swift 语⾔的知识点的集合。我⾃⼰是赴美参加了 Apple 的 WWDC 14 的,也正是在这届 开发者⼤会上,Swift 横空出世。毫不夸张地说,从 Swift 正式诞⽣的第⼀分钟开始,我就在学习 这⻔语⾔。虽然天资驽钝,不得其所,但是在这段集中学习和实践的时间⾥,也还算总结了⼀些 ⼼得,⽽我把这些总结加以整理和示例,以⼀个个的⼩技巧和知识点的形式,编写成了这本书。 本书中每⼀节都是⼀个相对独⽴的主题,涵盖了⼀个中⾼级开发⼈员需要知道的 Swift 语⾔的⽅⽅ ⾯⾯。 这本书⾮常适合⽤作官⽅⽂档的参考和补充,也会是中级开发⼈员很喜爱的 Swift 进阶读本。具体 每个章节的内容,可以参看本书的⽬录。 这本书不是什么 这本书不是 Swift 的⼊⻔教程,也不会通过具体的完整实例引导你⽤ Swift 开发出⼀个像是计算器 或者记事本这样的 app。这本书的⽬的⼗分纯粹,就是探索那些不太被⼈注意,但是⼜在每天的 开发中可能经常⽤到的 Swift 特性。这本书并不会系统地介绍 Swift 的语法和特性,因为基于本书 的写作⽬的和内容特点,采⽤松散的模式和⾮线性的组织⽅式会更加适合。 换⾔之,如果你是想找⼀本 Swift 从零开始的书籍,那这本书不应该是你的选择。你可以在阅读 Apple ⽂档后再考虑回来看这本书。 组织形式和推荐的阅读⽅式 本书的每个章节的内容是相对独⽴的,也就是说你没有必要从头开始看,随⼿翻开到任何⼀节都 是没问题的。当然,按顺序看会是⽐较理想的阅读⽅式,因为在写作时我特别注意了让靠前的章 节不涉及后⾯章节的内容;另⼀⽅⾯,位置靠后的章节如果涉及到之前章节内容的话,我添加了 跳转到相关章节的链接,这可以帮助迅速复习和回顾之前的内容。我始终坚信不断的重复和巩 固,是真正掌握知识的唯⼀途径。 本书的电⼦版的⽬录是可以点击跳转的,您可以通过⽬录快速地在不同章节之间导航。如果遇到 您不感兴趣或者已经熟知的章节,您也完全可以暂时先跳过去,这不会影响您对本书的阅读和理 解。 代码运⾏环境 建议您⼀边阅读本书时⼀边开启 Xcode 环境并且对每⼀章节中的代码进⾏验证,这有利于您真正 理解代码示例想表达的意思,也有利于记忆的形成。随本书所附的 Playground ⽂件中有⼤部分章 节的示例代码,以供参考。每⼀段代码示例都不太⻓,但却是经过精⼼准备,能很好地说明章节 内容的,希望您能在每⼀章⾥都能通过代码和我进⾏⼼灵上的“对话”。您也可以在已有的基础上进 ⾏⾃⼰的探索,⽤来加深对讨论内容的理解。 书中每⼀章基本都配有代码示例的说明。这些代码⼀般来说包括 Objective-C 或者 Swift 的代码。 理论上来说所有代码都可以在 Swift 4 (也就是 Xcode 9) 版本环境下运⾏。当然 因为 Swift 版本变 化很快,可能部分代码需要微调或者结合⼀定的上下⽂环境才能运⾏,但我相信这种调整是显⽽ 易⻅的。如果您发现明显的代码错误和⽆法运⾏的情况,欢迎到本书的 issue ⻚⾯ 上提出,我将 尽快修正。 7
介绍 如果没有特别说明,这些代码在 Playground 和项⽬中都应该可以运⾏,并拥有同样表现的。但是 也存在⼀些代码只能在 Playground 或者项⽬⽂件中才能正确⼯作的情况,这主要是因为平台限制 的因素,如果出现这种情况,我都会在相关章节中特别加以说明。 勘误和反馈 Swift 仍然在⾼速发展和不断变化中,本书最早版本基于 Swift 1.0,当前版本基于 Swift 4。随着 Swift 的新特性引⼊以及错误修正,本书难免会存在部分错误,其中包括为对应的更新纰漏或者部 分内容过时的情况。虽然我会随着 Swift 的发展继续不断完善和修正这本书,但是这个过程亦需要 时间,请您谅解。 另外由于作者⽔平有限,书中也难免会出现⼀些错误,如果您在阅读时发现了任何问题,可以到 这本书 issue ⻚⾯进⾏反馈。我将尽快确认和修正。得益于电⼦书的优势,本书的读者都可以在 本书更新时免费获得所有的新内容。每次更新的变更内容将会写在本书的更新⼀节中,您也可以 在更新内容⻚⾯上找到同样的列表。 版权问题 为了⽅便读者使⽤和良好的阅读体验,本书不包含任何 DRM 保护。⾸先我在此想感谢您购买了 这本书,在国内知识产权保护不⾜的现状下,我⾃知出版这样⼀本没有任何保护措施的电⼦书可 能⽆异于⻜蛾扑⽕。我其实是怀着忐忑的⼼情写下这些⽂字的,⼩⼼翼翼地希望没有触动到太多 ⼈。如果您不是通过 Gumroad,Leanpub 或者是 SelfStore 购买,⽽拿到这本书的话,您应该是 盗版图书的受害者。这本书所提供的知识和之后的服务我想应该是超过它的售价 (⼤约是⼀杯星巴 克咖啡的价格) 的,在阅读前还请您再三考虑。您的⽀持将是我继续更新和完善本书的动⼒,也对 我继续前进是很⼤的⿎励。 另外,这本书也有纸质版本,不过暂时是⾯向 Swift 2.0 的。如果您有意阅读,可以搜 索“Swifter:100个Swift开发必备Tip 第⼆版”来获取相关信息。 最后⼀部分是我的个⼈简介,您可以跳过不看,⽽直接开始阅读正⽂内容。 作者简介 8
分享到:
收藏