响应式编程(Reactive Programming)
面向异步数据流的编程思想。业界比较知名的响应式框架是 ReactiveX 系列。Rx 也有 Swift 版本 — RxSwift
。
响应式异步编程
在响应式异步编程中,一个事件及其对应的数据被发布出来,最后被订阅者消化和使用。期间这些事件和数据需要通过一系列操作变形,成为我们最终需要的事件和数据。
观察者模式
观察者模式是设计模式的一种,在软件开发中经常会用到,比如 KVO
,通知
等都用到了观察者模式。观察者模式中有两个角色,一个是被观察者,一个是观察者。比如`一个宝宝在睡觉,爸爸妈妈不能在一直守候在身边,他们自己处理各自的事情,但是一旦听到宝宝的哭声,他们就去看宝宝。这就是一个典型的观察者模式。宝宝是被观察者,爸爸妈妈是观察者(也称作订阅者),只要被观察者发出了某些事件比如宝宝哭声就是一个事件,通知到订阅者,订阅者们就可以做相应的处理工作。Combine 的实现基于观察者模式。
Combine简介
在现代 GUI 编程中,开发者会处理大量事件(包括网络,屏幕输入,系统通知等),根据事件去让界面发生变化。而对异步事件的处理,会让代码和状态变得复杂。而现有的 Cocoa 框架中,异步编程的接口主要有以下这几种:
- Target/Action
- NotificationCenter
- KVO
- Callbacks
而在实际情况中,由于不同的第三方库,系统框架,业务代码可能采用不一样的方式处理异步事件,会导致对事件的处理分散且存在差异。苹果为了帮助开发者简化异步编程,使代码更加简洁、易于维护,WWDC2019 发布了 Swift 的异步编程框架 — Combine。
核心概念
Combine 框架有三个核心概念
- 发布者(Publisher):负责发布事件
- 订阅者(Subscriber):负责订阅事件
- 操作符(Operator):负责在
Publisher
和Subscriber
之间转换事件和数据
响应式编程与Combine的对应关系.png
Combine概览.png
Combine特点
-
基于泛型
:支持泛型 -
类型安全
:Swift 会检查类型安全问题。 -
组合优先
:Apple 建议使用多个自定义Publisher
将小部分的事情组合起来。 -
请求驱动
(Request Driven):基于请求和响应的设计思想,消费者向生产者请求某个事务的变化,当变化时生产者给消费者对应的响应。