Combine 学习笔记(一):响应式编程与 Combine 概述

零、前言

在现代 GUI 编程中,开发者往往会处理大量事件(例如网络请求,屏幕输入,系统通知等),根据事件去让用户界面发生变化。而对异步事件的处理,会让代码和状态变得尤其复杂。为了帮助开发者简化异步编程,使代码更加简洁、易于维护,苹果在 WWDC 2019 发布了基于 Swift 的响应式异步编程框架 —— Combine。

阅读本系列文章需要熟悉 Swift语法、熟悉基于 UIKit或 SwiftUI的 iOS开发知识。若你对上述基础还不是很了解,建议回头巩固后再来看本系列文章。

一、观察者模式与响应式编程

在观察者模式中有两个角色,一个是被观察者,一个是观察者。比如一个婴儿正在睡觉,爸爸妈妈不能一直守候在身边,他们自己处理各自的事情,但是一旦听到婴儿的哭声,他们就去看发生了什么事情。这就是一个典型的观察者模式:婴儿是被观察者(也称为发布者),爸爸妈妈是观察者(也称为订阅者),只要被观察者发出了某些事件(比如婴儿哭声就是一个事件),通知到观察者,观察者就可以做相应的处理工作。观察者模式提供了一种思想,即发布-订阅思想。从中可以衍生出很多编程模型,比如发布者-订阅者模型、事件-事件源-监听器模型、被观察者-发射器-订阅者模型,这些模型应该都属于响应式编程的范畴。可以说只要是基于观察者模式实现的编程思维,都属于响应式编程。

响应式编程(Reactive Programming)是面向异步数据流的编程思想。一个事件及其对应的数据被发布者(Publisher)发布出来,最后被订阅者(Subscriber)消化和使用。期间这些事件和数据需要通过操作符进行一系列变形,成为我们最终需要的事件和数据。RxSwift 是业界较为知名的 Swift 响应式编程框架。

二、Combine 简介

Combine 是 Apple 官方于 iOS 13 之后在 Swift 语言层面实现的响应式异步编程框架,可以用来处理开发中常见的 Target/Action、Notification、KVO、callback/closure 以及各种异步网络请求。它可以使代码更加简洁、易于维护,也免于饱受诟病的嵌套闭包和回调地狱。

Combine 的组成由下图所示:

● Publisher(发布者):负责发布数据。
● Subscriber(订阅者):负责订阅数据。
● Operator(操作符):负责在 Publisher 和 Subscriber 之间进行数据的转换。

Combine 的流程可以简单的可描述为:

据 Apple 介绍,Combine 还有以下特点:

● 基于泛型:支持泛型。
● 类型安全:Swift 会进行类型检查。
● 组合优先:Apple 官方建议使用多个自定义 Publisher 将小部分的事情组合起来。
● 请求驱动(Request Driven):基于请求和响应的设计思想,Subscriber 向 Publisher 发出请求,Publisher 向 Subscriber 给予响应。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注