猜你喜欢
Swift:面向协议编程

Swift:面向协议编程

书籍作者:陈刚 ISBN:9787121301957
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:4660
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

《Swift:面向协议编程》第1章简要介绍了Swift 的发展历史以及Swift 开发工具的获取途径。第2章介绍了Swift 的基础语法,细致讲解了面向协议编程中至关重要的协议扩展用法与泛型优化。第3章讲解了Swift 的进阶语法,从语言层面深入到内存层面,对Swift 的特性进行了剖析,帮助读者写出更加Swift 化的代码。第4章通过一个完整的计算器Demo 指导读者快速完成一个iOS 应用的开发,熟悉Xcode 的使用,理解经典的MVC 编程模式。第5章通过一个备忘录Demo,将传统的MVC、MVVM 思想构建的程序与基于协议构建的程序进行了多个维度的对比,揭开了面向协议编程思想的神秘面纱,教会读者如何在实际工作中应用面向协议编程思想。

作者简介

陈刚(微博@Cwift),《Swift开发手册:技巧与实战》作者,SwiftGG翻译组成员,CSDN 博客专家。曾担任 GMTC 2016 Workshop专场讲师,一个生活上充满活力,技术上严肃认真的Swifter,正在努力挖掘Swift的强大潜力。

编辑推荐

面向协议编程包含了Swift标准库的核心思想,为代码的健壮性和灵活性提供了良好的支持。

本书由浅入深,详细阐述了如何面向协议编程,实例丰富,值得一读。

前言

众所周知,在2015年的 WWDC 上,苹果发布了 Swift 语言的 2.0 版本,并且正式宣布 Swift 成为一门面向协议编程的语言。作为一个从 2014 年就开始接触Swift 的程序员,我在当时已经具备了一定的 Swift 面向对象编程经验,这些经验帮助我顺利地完成了工程的更新;同样,这些经验也让我变得迟钝。在 2.0 版本发布之初,面向协议编程这个名词就好像一滴水滴入了大海中,从我的关注中溜走了。好在我是个对知识充满敬意的人,此后的数月中,我都在重点研究 WWDC 2015 的视频资料,此时我才惊奇地发现,最初的那滴水变成了我心头的惊涛骇浪,我开始不断地思考与探索面向协议编程的含义。

那么面向协议编程到底是什么呢?一句话就能概括:用协议扩展的方式代替继承,实现代码复用。这个“代替”的影响是深远的,协议扩展使得值类型在保持原有特性的同时,也能和引用类型一样实现代码的复用。定长的值类型保存在栈内存上,值类型没有引用计数、不会被“共享”、只需用常数时间就能完成一次“复制”,等等,这些特性使得值类型相比引用类型拥有更快的读写速度。同时,值类型的方法可以在编译期进行“内联”优化,更多的值类型意味着更大的优化空间。Swift 不但通过协议扩展的方式填补了传统面向对象编程语言中值类型代码复用的鸿沟,同时应用 Copy-on-Write 技术还可免于陷入“绝对复制”带来的性能问题。在 Swift 的代码世界中,值类型得到了空前的解放。如果你正在使用 Swift 3.0 版本,那么你应该已经发现了,那些摘掉了“NS”前缀的 Swift 原生对象,大部分都变成了值类型,毫无疑问,这种演变在后续的版本中还会继续进行下去。所以从内存的角度来看,面向协议编程正朝着面向栈内存编程的方向前进。

这本书诞生于我在重新研究 WWDC 2015 视频的阶段,我所编著的《Swift开发手册:技巧与实战》首印即将售罄,该书的责编安娜(也是本书的责编)与我商讨重印的细节。受写作时Swift版本的影响,《Swift开发手册:技巧与实战》是一本面向对象编程的教材;所以在深思熟虑之后,我决定放弃该书的重印,重新创作一本面向协议编程的教材,也就是你现在看到的《Swift:面向协议编程》。在本书的创作过程中,我保留了旧作中的部分目录和示例,加入了我对 WWDC 2015 以及 WWDC 2016重新研究后的心得体会、个人在工作中的面向协议编程实战经验以及对编程模式的思考。Swift 开源之后,除了可以在 iOS 平台应用外,在其他平台也有强劲表现,所以本书的内容编排侧重于语言本身及编程方式的思考,弱化了 iOS 开发的教学。由于本书的创作时间比较久,所以主体内容是基于 Swift 2.2 版本创作的。在 Swift 3.0 版本发布之后,我第一时间投身到新版本的学习中,在本书的第二次排版时加入了 Swift 3.0 的改动,力争做到全面和准确。可以预见,3.0 版本不会是 Swift 的最后一个版本,所以请读者在学习时以当前的语言版本做参考。

最后感谢电子工业出版社的编辑安娜为本书所做的付出,多次合作我们已经建立了深厚友谊与足够的默契。感谢公司对我的信任,让我如愿以偿地成为了一名职业 iOS 开发者,获得了很多应用 Swift 的机会。感谢智维,创业辛苦仍不失对技术的热情,在百忙中抽出时间帮我写序,祝趣直播越做越好。感谢帮我写书评的王巍大神、InfoQ主编徐川老师、还有圈内好友RxSwift大神小青和SwiftGG翻译组的前辈羊叔,你们的支持是我前进的动力,同时也感谢唐巧、付若愚和李明杰三位老师的关注。感谢师父时永昌对我的关怀和指导,感谢和我合作开发第一个 Swift 项目的同事杨帅以及同组的所有同事,感谢帮我纠错的同事蒙朦,感谢共同学习进步的其他TStar们(白建国、薛刚、施洁、邓飞)。

为了更好地解答读者疑问,第一时间分享Swift心得,我开通了微信订阅号:SwiftTime雨燕时光,欢迎读者订阅交流。

目录

第1章 搭建Swift开发环境

1.1 Swift介绍

1.1.1 Swift的前世今生

1.1.2 Swift与Objective-C

1.2 Mac OS X操作系统

1.3 Xcode简介和获取方法

1.3.1 Xcode简介

1.3.2 playground简介

1.3.3 Xcode的获取方法

1.4 iPhone SDK简介

第2章 Swift基础语法

2.1 基础知识

2.1.1 命名规则

2.1.2 常量与变量

2.1.3 类型推测

2.1.4 注释

2.1.5 输出常量和变量

2.2 基本数据类型

2.2.1 整数

2.2.2 浮点数

2.2.3 布尔类型

2.2.4 元组类型

2.2.5 可选型

2.3 基本运算符

2.3.1 赋值运算符

2.3.2 数值运算

2.3.3 自增和自减运算

2.3.4 复合赋值

2.3.5 比较运算

2.3.6 三元运算符

2.3.7 逻辑运算符

2.3.8 范围

2.3.9 括号优先级

2.4 字符串与字符

2.5 集合类型

2.5.1 数组

2.5.2 集合

2.5.3 字典

2.6 控制流

2.6.1 for循环

2.6.2 while循环

2.6.3 if判断语句

2.6.4 guard判断语句

2.6.5 switch开关语句

2.7 函数

2.8 闭包

2.9 Swift三杰——类、结构体、枚举

2.9.1 Swift三杰简介

2.9.2 值引用与类型引用

2.9.3 类

2.9.4 结构体

2.9.5 枚举

2.10 属性

2.10.1 存储属性

2.10.2 计算属性

2.10.3 属性观察器

2.10.4 类型属性

2.11 方法

2.12 下标

2.13 继承

2.14 构造与析构

2.14.1 构造器

2.14.2 析构器

2.15 类型检查与类型转换

2.15.1 类型检查

2.15.2 类型转换

2.16 类型嵌套

2.17 扩展

2.17.1 扩展计算属性

2.17.2 扩展构造器

2.17.3 扩展方法

2.17.4 扩展下标

2.18 协议

2.18.1 声明协议

2.18.2 遵守协议

2.18.3 实现协议

2.18.4 实现扩展

2.18.5 协议扩展补充

2.18.6 协议的继承

2.19 泛型

2.19.1 节点泛型

2.19.2 泛型协议

2.19.3 泛型对象

2.19.4 泛型方法

2.19.5 协议中的where关键字

2.19.6 泛型特化

2.20 Swift语法补充

2.20.1 断言

2.20.2 precondition

第3章 Swift进阶语法

3.1 再谈可选型

3.1.1 可选型

3.1.2 为什么要用可选型

3.1.3 解包可选型

3.1.4 可选绑定

3.1.5 可选链

3.1.6 可选型中的map和flatMap

3.1.7 Swift中的错误处理

3.1.8 隐式解包

3.1.9 关于可选型的思考

3.2 同构与异构

3.2.1 数据源中的同构与异构

3.2.2 AnyObject/Any简介

3.2.3 AnyObject的使用

3.2.4 AnyObject与id的对比

3.3 数组方法的探究

3.3.1 filter方法

3.3.2 map和flatMap方法

3.3.3 reduce方法

3.3.4 sort(sorted)方法

3.3.5 Side-Effect与forEach方法

3.3.6 contains方法

3.3.7 indexOf(index(of:))方法

3.3.8 prefix、suffix系方法

3.3.9 dropFirst、dropLast方法

3.3.10 Slice

3.3.11 RangeReplaceableCollectionType

3.3.12 数组的底层协议

3.3.13 带下标的数组遍历

3.3.14 Demo演示

3.4 Objective-C兼容性

3.4.1 类型桥接

3.4.2 OC和Swift的设计区别

3.5 Swift内存管理

3.5.1 栈和堆

3.5.2 值类型和引用类型

3.5.3 Copy-on-Write

3.5.4 利用引用类型的“共享”

3.5.5 ARC(自动引用计数)

3.5.6 循环引用

3.5.7 弱引用与无主引用

3.5.8 柯里化与方法参数中的闭包

3.5.9 @noescape与@autoclosure

3.5.10 静态派发和动态派发

3.5.11 协议类型的存储属性

3.5.12 静态多态与动态多态

3.5.13 泛型特化

3.5.14 小结

3.6 模式匹配

3.6.1 模式匹配简介

3.6.2 枚举的模式匹配

3.6.3 元组的模式匹配

3.6.4 if和guard中的模式匹配

3.6.5 for中的模式匹配

3.6.6 模式匹配中的where关键字

第4章 iOS开发入门

4.1 iOS系统初探

4.1.1 核心OS(Core OS)层

4.1.2 核心服务(Core Services)层

4.1.3 媒体(Media)层

4.1.4 Cocoa Touch层

4.2 MVC模式

4.2.1 MVC简介

4.2.2 iOS中的MVC

4.3 新建一个Swift工程

4.4 认识Interface Builder

4.5 构建计算器界面

4.5.1 使用对象库中的对象

4.5.2 使用检查器设置对象

4.5.3 尝试运行程序

4.5.4 添加约束

4.5.5 关联代码

4.5.6 完善按键

4.6 实现计算器逻辑

4.6.1 补全键盘

4.6.2 给键盘添加约束

4.6.3 实现数字显示功能

4.6.4 实现运算逻辑

4.7 修改计算器为MVC模式

4.8 NSNotification

4.8.1 NSNotification简介

4.8.2 addObserver方法

4.8.3 addObserverForName方法

4.8.4 postNotification方法

4.8.5 Swift 3.0中的Notification

4.9 AutoLayout快速入门

4.9.1 边距与距离

4.9.2 中心与对齐

4.9.3 尺寸与比例

4.9.4 绝对位置与挤压

第5章 面向协议编程

5.1 继承与组合

5.2 搭建页面

5.3 创建storyboard对应的子类

5.4 创建模型

5.5 串联MVC

5.6 MVVM

5.7 图解MVC与MVVM

5.8 MVC面向协议化

5.9 MVC多态优化

5.10 快速开发

5.11 组合

5.12 交互

5.13 搜索

产品特色