SwiftUI 和 Combine 编程

SwiftUI 和 Combine 编程

  • SwiftUI

响应式编程。

基于 UIKit、Core Graphics、Core Text 等系统框架封装了完整而优美的 DSL。

Combine 响应式编程框架和函数式编程思想直接驱动了 SwiftUI 中的数据流向。

提供了一套通用的语法和基础数据类型,抹平 Apple 自家平台差异性,降低同生态跨端难度。

抛弃 ViewController 概念。

在 API 层面上,有 RAC 链式调用的影子和 Combine 的强依赖实现。

  • Combine

SwiftUI 中处理数据的本体,响应式框架。

提供给 SwiftUI 中与数据源双向绑定的能力。

数据流式处理「链式」调用。与 SwiftUI 的「链式」组织 UI 不同,SwiftUI 是通过链式调用构造出一个确定的单一对象(语法糖),但 Combine 的每一次链式调用都会生成一个新的源数据。

  • 链式调用

「链式调用的过程」被称为是 SwiftUI 中 View 的 modifier,每个 modifier 的调用结束后,返回给下一个 modifier 有两种情况:第一种情况只是对 View(如 Text)的 font 等与布局无关的方法,返回给下一个 modifier 相同类型的 View;第二种情况对 View 的布局产生了修改,如调用了 padding 等方法,返回给下一个链式调用的 modifier 是一个重新包装过的全新 View。

SwiftUI 与 Combine 之间的联合关系,经常在思考如何合理有效的组织各个数据源去控制组件的交互。其中一定要死死握住的就是「单一数据源」,把能够引发某个组件产生某种行为的源头限制在同一个数据对象本身。

其中,最为常用的三个状态修饰符为:

@State;

@Binding;

@ObservedObject。

Combine 中的三大支柱 Publisher,负责发布事件;

Operator,负责转换事件和数据;

Subscribe,负责订阅事件。

这三者都是协议,且都是 @propertyWrapper 的具体应用。

Publisher

Publisher 最主要的工作其实有两个:发布新的事件及其数据,以及准备好被 Subscriber 订阅。Output 及 Failure 定义了某个 Publisher 所发布的值的类型,以及可能产生的错误 的类型。

Publisher 可以发布三种事件:

类型为 Output 的新值:这代表事件流中出现了新的值;

类型为 Failure 的错误:这代表事件流中发生了问题,事件流到此终止;

完成事件:表示事件流中所有的元素都已经发布结束,事件流到此终止。

Publisher 的这三种事件不是必须的,也就是说,Publisher 可能只发一个或者一个都不发,也有可能一直在发,永远不会停止,这就是无限事件流,还有可能通过发出 failure 或者 finished 的事件表明不会再发出新的事件,这是有限事件流。

Operator

每个 Operator 的行为模式都一样:它们使用上游 Publisher 所发布的数据作为输入,以此产生的新的数据,然后自身成为新的 Publisher,并将这些新的数据作为输出,发布给下游,这样相当于得到了一个响应式的 Publisher 链条。

当链条最上端的 Publisher 发布某个事件后,链条中的各个 Operator 对事件和数据进行处理。在链条的末端我们希望最终能得到可以直接驱动 UI 状态的事件和数据。这样,终端的消费者可以直接使用这些准备好的数据。

猜你喜欢

转载自www.cnblogs.com/liuxiaokun/p/12684267.html