SwiftCombine探索

436 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

简介

Combine是Apple在2019年WWDC上推出的一个新框架。

“A unified, declarative API for processing values over time”

统一、声明式、为处理变化的值而生的 API

Combine 作用是将异步事件通过组合事件处理操作符进行自定义处理。

关注如何处理变化的值,正是响应式编程所考虑的。也可以说,Combine 是一个苹果官方的 Swift 响应式框架。

Combine 特性

由于 Combine 是一个 Swift 编写的框架,所以 Combine 可以受益于 Swift 的一些语言特性。

泛型支持

Combine 享受 Swift 泛型带来的便利性。泛型可以帮助开发者提取更多模板代码,这也意味着我们可以让异步操作的代码支持泛型,然后适配到各个种类的异步操作中。 类型安全

同样受惠于 Swift,可以让编译器和 Runtime 帮助我们检查类型安全问题。

组合优先

Combine 的主要设计理念,使用组合。组合的优点是可以将核心设计得简单又便于理解,但当放在一起使用时,能产生 1 + 1 > 2 的效果。

请求驱动

请求驱动(Request Driven):基于请求和响应的设计思想,消费者向生产者请求某个事务的变

化,当变化时生产者给消费者对应的响应。
事件驱动(Event Driven):基于事件通知的设计思想。在事务发生变化时,生产者将通知提交给

事件管道进行分发,而不关心谁去消费事件。消费者需要到事件管道中订阅关心的通知。

Combine 是基于请求和响应的设计思想的,这允许你更精准的控制 App 的内存使用和性能。(这一块苹果没有详细解释)

核心

该框架提供了一个声明性的Swift API,用于随时间处理值。这些值可以表示多种异步事件。

Publisher协议声明了一种可以随时间传递一系列值的类型。Operators根据从upstream publishers接受到的值采取行动,并重新发布这些值。

在publishers链的末尾,Subscriber在接收元素时对其进行操作。Publisher仅在Subscriber明确请求时才会发出值。

通过采用Combine,通过集中事件处理代码并消除嵌套闭包和基于约定的回调等麻烦的技术,使代码更易于阅读和维护。

Combine 是基于泛型实现的,是类型安全的。它可以无缝地接入已有的工程,用来处理现有的 Target/Action、Notification、KVO、callback/closure以及各种异步网络请求。

在 Combine 中,有几个重要的组成部分:

发布者:Publiser

订阅者:Subscriber

操作符:Operator

Operator

操作符是 Combine 中非常重要的一部分,通过各式各样的操作符,可以将原来各自不相关的逻辑变成一致的(unified)、声明式的(declarative)的数据流。下面列出主要的操作符

转换操作符:

  • map/mapError
  • flatMap
  • replaceNil
  • scan
  • setFailureType

过滤操作符:

  • filter
  • compactMap
  • removeDuplicates
  • replaceEmpty/replaceError

reduce 操作符:

  • collect
  • ignoreOutput
  • reduce

运算操作符:

  • count
  • min/max

匹配操作符:

  • contains
  • allSatisfy

序列操作符:

  • drop/dropFirst
  • append/prepend
  • prefix/first/last/output

组合操作符:

  • combineLatest
  • merge
  • zip

错误处理操作符:

  • assertNoFailure
  • catch
  • retry

时间控制操作符:

  • measureTimeInterval
  • debounce
  • delay
  • throttle
  • timeout

其他操作符:

  • encode/decode
  • switchToLatest
  • share
  • breakpoint/breakpointOnError
  • handleEvents

总结

Combine 同过去我们使用的ReactiveObjc、RxSwift大致一样是将异步事件通过组合事件处理操作符进行自定义处理的响应式编程框架,兼容SwiftUI,非常适合将复杂的异步操作简单化

参考链接

Apple Developer Introducing Combine

Apple 官方异步编程框架:Swift Combine 简介

Apple 官方异步编程框架:Swift Combine 应用

Swift Combine

Swift Combine 入门导读

(WWDC) 初探 Combine

(WWDC) 实践 Combine