我想知道是否有一个优秀的文档来显示组合和RxSwift之间的差异?
快速学习Combine
对我有好处,因为我已经对RxSwift
有了很好的了解
Đức Bùi发表了一篇很好的文章,详细介绍了表面水平的差异。在这个回答中,我将介绍我发现的其他一些差异…
ACancellable
和ADisposable
的差异比文章所建议的要大得多。前者用于保持订阅活动,而后者仅在想要显式终止订阅时才需要。所以disposable可以被忽略,而Cancellables却不能。
Combine中的share(replay: x)
运算符相当于RxSwift的.share(replay: x, scope: .forever)
,没有共享.whileConnected
的概念。这意味着共享的发布者不能像共享的可观察对象那样重新启动。
其他问题:
- 联合收割机的背压处理是一个额外的复杂你永远不需要,但无论如何必须处理。
- Combine中的每个操作符返回不同的类型,其中大多数都是包装它们的源类型,所以它们变得非常复杂快。
eraseToAnyPublisher()
操作符提供了一些缓解,但是必须不断使用它本身就是一种折磨。 缺乏UIKit支持是很困难的。最好使用SwiftUI。作为因此,这不是一个简单的从一个API到另一个API的转换,而是一个复杂的过程完全重写。 - 你很快就会发现自己在寻找第三方库以便填满合并后留下的洞。如果你要转换为了避免第三方库而进行组合,您已经击败了目的。
至于利益?我只找到了一个。组合主题是线程安全的,而RxSwift主题不是。在RxSwift中,你很少需要subject,而在Combine中,你总是需要它们。