Combine理论基础

2020-02-18 15:35:34 浏览数 (1)

响应式编程(Reactive Programming)

面向异步数据流的编程思想。业界比较知名的响应式框架是 ReactiveX 系列。Rx 也有 Swift 版本 — RxSwift

响应式异步编程

在响应式异步编程中,一个事件及其对应的数据被发布出来,最后被订阅者消化和使用。期间这些事件和数据需要通过一系列操作变形,成为我们最终需要的事件和数据。

观察者模式

观察者模式是设计模式的一种,在软件开发中经常会用到,比如 KVO通知等都用到了观察者模式。观察者模式中有两个角色,一个是被观察者,一个是观察者。比如`一个宝宝在睡觉,爸爸妈妈不能在一直守候在身边,他们自己处理各自的事情,但是一旦听到宝宝的哭声,他们就去看宝宝。这就是一个典型的观察者模式。宝宝是被观察者,爸爸妈妈是观察者(也称作订阅者),只要被观察者发出了某些事件比如宝宝哭声就是一个事件,通知到订阅者,订阅者们就可以做相应的处理工作。Combine 的实现基于观察者模式。

Combine简介

在现代 GUI 编程中,开发者会处理大量事件(包括网络,屏幕输入,系统通知等),根据事件去让界面发生变化。而对异步事件的处理,会让代码和状态变得复杂。而现有的 Cocoa 框架中,异步编程的接口主要有以下这几种:

  • Target/Action
  • NotificationCenter
  • KVO
  • Callbacks

而在实际情况中,由于不同的第三方库,系统框架,业务代码可能采用不一样的方式处理异步事件,会导致对事件的处理分散且存在差异。苹果为了帮助开发者简化异步编程,使代码更加简洁、易于维护,WWDC2019 发布了 Swift 的异步编程框架 — Combine。

核心概念

Combine 框架有三个核心概念

  • 发布者(Publisher):负责发布事件
  • 订阅者(Subscriber):负责订阅事件
  • 操作符(Operator):负责在PublisherSubscriber之间转换事件和数据

响应式编程与Combine的对应关系.png

Combine概览.png

Combine特点
  • 基于泛型:支持泛型
  • 类型安全:Swift 会检查类型安全问题。
  • 组合优先:Apple 建议使用多个自定义Publisher将小部分的事情组合起来。
  • 请求驱动(Request Driven):基于请求和响应的设计思想,消费者向生产者请求某个事务的变化,当变化时生产者给消费者对应的响应。

0 人点赞