Front-end
Apple
Apple
  • 第三方库
    • RAC库
      • ReactiveObjc
        • 如何实现的
        • 有关类
        • 有关协议
        • 关键概念列表
          • RACSignal有关类
            • RACStream
              • 头文件定义
            • RACSignal
              • 头文件定义内容
              • 核心代码
              • 常用的方法
                • concat:
                • bind:
                • zipWith 和merge
            • RACSubject
              • 内容
            • RACReplaySubject
              • 内容
            • RACBehaviorSubject
              • 内容
            • RACGroupedSignal
              • 内容
            • RACDynamicSignal
              • RACDynamicSignal
              • RACSignal vs RACDynamicSignal
            • RACReturnSignal
              • 内容
            • RACErrorSignal
            • RACEmptySignal
            • RACChannelTerminal
            • 疑问
              • RACChannelTerminal vs RACSubject
              • RACSignal vs RACStream
              • 热信号和冷信号
                • 进一步理解
              • 信号的发送者和接受者
                • RACSignal 不是信号对象么?为什么信号的发送者是自己呢?
          • RACChannel有关类
            • RACChannel
              • Page 1
              • 用于MVVM架构
              • RAC() vs RACChannelTo()
            • RACKVOChannel
              • 内容
              • 封装了系统的KVO
          • RACCommand
          • RACSubscriber
          • RACTuple
          • RACSequence有关类
          • RACKVOTrampoline
            • NSObject+RACKVOWrapper.h
            • NSObject+RACKVOWrapper.m
          • Page
          • 宏
          • 疑问
            • RACCommand vs RACSignal
            • 有了信号量,为什么还需要RACCommand
        • 操作方法
          • reduce
            • reduce 在不同语言以及库中是否一样的概念?
      • ReactiveSwift
        • 相比ReactiveObjc
      • RxSwift
      • Combine
      • 疑问
        • 热信号 vs 冷信号
        • ReactiveObjC 和 ReactiveSwift 实现原理差异
        • ReactiveObjC、ReactiveCocoa、ReactiveSwift的关系与区别
        • ReactiveObjC、ReactiveCocoa、ReactiveSwift内容
        • ReactiveSwift vs RxSwift
        • RxSwift、ReactiveSwift 和 ReactiveObjC
        • RxSwift、ReactiveSwift 、Combine
    • swift源码
      • 编译
        • 命令参数解释
        • 涉及到的工具
          • cmake 和 ninja
          • sccache
        • Rosetta模式
        • 遇到问题
          • FETCH_HEAD': Permission denied
          • --local_compiler_build': No such file or directory
          • ld: unsupported tapi file type '!tapi-tbd' in YAML file
          • python --version 显示没有这个命令
          • ModuleNotFoundError: No module named 'packaging'
          • ModuleNotFoundError: No module named 'sphinx'
            • sphinx是什么
          • ERROR: Could not find a version that satisfies the requirement sphinx (from versions: none)
          • /Applications/Python\ 3.x/Install\ Certificates.command 失败
          • 已经安装了sphinx,还是显示错误
      • 涉及到的知识点
        • Swift中的MCCAS
Powered by GitBook
On this page
  1. 第三方库
  2. RAC库
  3. 疑问

ReactiveSwift vs RxSwift

ReactiveSwift 和 RxSwift 在实现上的主要差异:

特性

ReactiveSwift

RxSwift

设计理念

ReactiveSwift 更关注于简单、精细的响应式编程,特别强调数据流的组合与事件管理。

RxSwift 基于 ReactiveX 的标准,提供了完整的响应式扩展,实现了 Reactive Extensions 的全套规范。

信号与事件流

使用 Signal 和 SignalProducer 进行信号流的管理,分别表示立即触发的事件流和可多次启动的数据流。

使用 Observable 表示数据流,支持流的多次订阅,且可通过不同策略来定义可热或可冷的流。

事件类型

使用 value、completed、failed 和 interrupted 四种事件类型,提供更细粒度的事件处理。

使用 next、completed、error 事件类型,更贴合 ReactiveX 规范。

操作符命名

操作符命名和使用偏向 Swift 原生命名,符合 Swift 的 API 设计规范,例如 map、filter、combineLatest 等。

操作符与 ReactiveX 相同,包含 flatMap, map, merge, zip 等,具有跨语言一致性。

组合操作

支持较为丰富的组合操作,如 map, filter, combineLatest, flatten,但在使用上偏向简洁。

提供全面的组合操作,包括 flatMapLatest、merge、zip 等操作,组合操作更丰富复杂。

错误处理

错误是事件流的一部分,SignalProducer 的流中可以包含 failed 事件,但出错后信号会自动终止。

通过 catchError、retry 等方式处理错误,不会立即终止流,提供更强大的错误恢复能力。

UI 绑定

主要配合 ReactiveCocoa 来实现 UIKit 或 AppKit 的绑定,UI 绑定相对简洁。

通过 RxCocoa 提供广泛的 UI 绑定,直接支持 UI 控件的响应式扩展,适合复杂的 UI 操作。

调度与线程

使用 Scheduler 管理线程和任务分配,支持主线程和后台线程的切换。

提供 Schedulers 支持线程管理,且有更多调度选项,如 MainScheduler、ConcurrentScheduler 等。

生命周期管理

使用 Lifetime 和 Disposable 来管理对象生命周期和信号释放,适合 Swift 的 ARC 模式。

通过 DisposeBag 管理生命周期,支持多个订阅的集中释放,易于内存管理。

性能

在内存占用和性能优化方面更适合 Swift,较为轻量。

丰富的操作符和扩展特性使 RxSwift 在大型项目中广泛使用,但相对较重。

总结

  • ReactiveSwift 更适合那些希望在 Swift 项目中使用简洁、轻量响应式编程的场景,尤其是注重 Swift 原生风格的开发者。

  • RxSwift 则是一个成熟、功能丰富的响应式编程框架,适合更复杂的项目和跨平台开发需求,并且对 ReactiveX 标准有较好的支持。

PreviousReactiveObjC、ReactiveCocoa、ReactiveSwift内容NextRxSwift、ReactiveSwift 和 ReactiveObjC

Last updated 8 months ago