实用组合

Practical Combine

关于本书

《实用组合》是由Donny Wals撰写的一本书,面向想要更多了解 Apple 组合框架的中高级开发人员。本书将通过现实的例子带您踏上Combine之旅。首先,您将了解基础知识。您将了解合并中的发布者和订阅者以及他们的作用。在向您介绍基础知识后,您将了解如何使用合并来驱动用户界面或响应用户交互。您还将了解如何在网络层中使用组合,如何使用Futures使您的应用程序所做的任何异步工作与组合兼容,您甚至将了解如何构建自己的组合发布者。

本书还解释了如何使用Timelane调试合并代码,以及如何使用 Xcode 内置的 XCTest 框架为合并代码编写测试。

换句话说,《实用组合》向您介绍了所有基本的想法、概念和原则,以便您尽快启动并运行该框架。

获得实用的组合

章节概述

第 1 章 – 函数式响应式编程简介

了解组合和函数响应式编程 (FRP) 的基本构建块。我解释什么是 FRP,以及它如何帮助您编写更好、更简洁的代码。您将立即看到一些合并代码,以帮助您了解 FRP 如何在某些情况下增强代码可读性。您还将了解 RxSwift 和 Combine 之间的一些非常表面的差异。这将帮助您了解合并在 FRP 生态系统中的位置,如果您的应用程序适用于 iOS 13 及更高版本,它将帮助您在两个框架之间进行选择。

第 2 章 – 探索发布者和订阅者

发布者是Combine 框架的支柱。没有出版商,我们就没有什么可订阅的。在本章中,您将了解发布者的工作方式,如何订阅他们发布的价值观,更重要的是,您将了解所有这些意味着什么。在完成基本示例后,您将了解订阅流的生命周期以及订阅发布者的具体工作原理。

第 3 章 – 出版商转型

在大多数情况下,发布者发布的值需要先进行修改,然后才能被订阅者使用。在本章中,我演示了一些Combine 内置运算符(如map、flatMap 和compactMap)的用法。我们还将介绍一些更高级的运算符,例如replaceNil 和setFailureType。您还将了解可能引发错误以结束发布者流的运算符,例如 tryMap。我们将通过在 Publisher 上定义一个自定义运算符来结束本章,该运算符将几个其他运算符捆绑在一个方便的包装器中。

第 4 章 – 更新用户界面

在第四章中,我们终于要真正开始实践了。您将了解如何使用组合来通过名为“分配(to:on :)”的新订阅者更新标签的值。您还将了解如何在类似 MVVM 的架构中使用组合,以及如何使用它来驱动集合视图的可比较数据源,而无需实现任何特定的架构。除了更新集合视图数据源之外,我还演示了如何使用合并来下载需要在集合视图单元格中显示的图像。最重要的是,您将学习如何构建一个组合驱动的主题管理器,该管理器可用于允许用户在独立于系统设置的暗模式和亮模式之间切换您的应用程序。

第 5 章 – 使用组合来响应用户输入

在本章中,您将学习如何在 UI 组件和模型之间实现几个简单的绑定。一旦您了解了 UIKit 中的工作原理,我将演示如何在 SwiftUI 中实现相同的原理,因为许多此类功能在 SwiftUI 中都是免费的。您还将了解如何通过称为去抖动的功能来限制用户输入的处理。如果您正在构建一个功能,其中用户输入会导致昂贵的处理(例如网络),那么这尤其有用。您还将了解合并提供的不同机制,用于将多个发布者的输出合并并组合到单个发布者中。在本章结束时,您应该很好地了解如何更新合并中的发布者,以及如何使用它们将模型和用户界面元素与合并集成。

第 6 章 – 使用 Joint 进行联网

在前面的章节中,我经常使用网络作为组合发布者的示例。到目前为止,网络示例的使用都是非常基础的。在本章中,您将对合并中的网络有更深入的了解,以及合并如何帮助您支持 iOS 上的低数据模式等功能,或者如何实现优雅的错误处理。除了网络之外,您还将了解一些有趣的新运算符,例如 tryCatch 和 switchToLatest。您将使用这些新运算符以及您目前熟悉的几个运算符来实现相当复杂的令牌刷新流程。本章并未就此结束。我还将向您展示如何同时编排多个网络调用,并将它们的输出合并到一个发布者中。在本章结束时,您将掌握使用合并实现强大的网络层所需的所有知识。

第 7 章 – 用 Futures 组合包装现有的异步流程

并非所有异步代码都易于与合并集成。在本章中,您将了解一个非常特殊的出版商,称为未来。该发布者并不完全遵循与其他发布者相同的推断规则,但它是一个非常方便的发布者,它允许我们启动异步工作,并将该工作的结果广播给其订阅者。您将学习如何在 UNUserNotificationCenter 之上实现一个简单的基于 Future 的接口,并且我将向您展示如何在 Future 中包装您自己的异步代码。

第 8 章 – 了解 Combine 的调度程序

在Combine 中,许多与线程和调度队列相关的逻辑对您隐藏起来,这非常方便。但是,有时您可能需要执行一些手动工作来确保某个发布者在主队列上发送其事件,或者您可能希望确保它不在主队列上运行代码。在调度程序后面组合抽象调度队列。在本章中了解调度程序的工作原理,并了解它们如何影响您在应用程序中编写的代码。

第 9 章 – 构建自定义发布者和订阅者

本章带有一个巨大的警告。本章中的任何内容都不应该在生产中使用。但是,我们将从概念上分解当您通过重新实现功能来使用接收器订阅发布者时会发生什么。Apple 不建议 Combine 用户这样做,这是有充分理由的。作为框架的用户,订阅如何工作的细节对我们来说是隐藏的。无论如何,我个人喜欢重新实现功能,以尝试更好地理解它的工作原理,从而产生有趣的见解。

第 10 章 – 调试您的合并代码

调试很困难,尤其是在处理异步代码时。在本章中,您将了解有关Combine 的“print”运算符的更多信息,并且您将了解名为Timelane 的社区工具,该工具可用于可视化您的Combine 订阅的生命周期和发出的值。

第11章 – 测试使用Combine的代码

在本章中,您将学习如何使用 XCTest 为您的合并代码编写单元测试。在测试组合代码时,您将学到应该做和不应该做的事情。我还将向您展示如何优化代码以实现可测试性,并且我将向您展示两个方便的助手,可以帮助您改进和清理测试套件。

第 12 章 – 推动出版商和主题流量

了解如何使用Combine 的 PassthroughSubject、CurrentValueSubject 和一些巧妙的运算符构建真正强大且复杂的功能。您将学习如何在合并中处理分页 API、如何递归加载数据,并且我将向您展示在令牌刷新后重试网络调用的替代方法。

第13章-接下来该去哪里

虽然本书应该让您为许多合并用例做好准备,但也有很多我没有介绍的内容。在本章中,我的目的是让您深入了解我没有介绍的功能,以及您可能想要获取的资源,以进一步加深您的组合知识和专业知识。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。