ios - ReactiveSwift 中 PublishSubject 的等价物是什么?

标签 ios reactive-swift

我在我的项目中使用 ReactiveSwift,我想知道 PublishSubject 的等效项是什么?

例如在 RXSwift 中我们可以这样做:

let disposeBag = DisposeBag()

let pubSubj = PublishSubject<String>()

pubSubj.on(.next("(next 1")) //event emitted to no subscribers

pubSubj.subscribe({ //subscriber added, but no replay of "next 1"
                print("line: \(#line),", "event: \($0)")
            })
.disposed(by: disposeBag)

pubSubj.on(.next("(next 2")) //event emitted and received by subscriber
pubSubj.onError(MyError.error1) //emits error and terminates sequence

pubSubj.on(.next("next 3")) //pubSubj cannot emit this event
/* prints: 
line: 8, event: next((next 2)
line: 8, event: error(error1) 
*/

最佳答案

ReactiveSwift 没有像Subject这样可以同时作为信号的输入和输出的单一类型。相反,您可以使用 Signal.pipe() 创建输入及其相应的输出信号:

import ReactiveSwift

enum MyError: Error { case error1 }

let (lifetime, token) = Lifetime.make()

let (signal, input) = Signal<String, MyError>.pipe()

input.send(value: "1")

signal
    .take(during: lifetime)
    .observe {
        print("line: \(#line),", "event: \($0)")
    }

input.send(value: "2")
input.send(error: .error1)

input.send(value: "3")

/* prints:
line: 14, event: VALUE 2
line: 14, event: FAILED error1
*/

关于ios - ReactiveSwift 中 PublishSubject 的等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59454846/

相关文章:

ios - 在 uisearchbar 中手动插入文本

ios - 由于启动时崩溃,应用程序被拒绝两次

ios - 类似类型: Cannot specialize a non-generic definition

swift - 为什么observeValues block 没有被调用?

ios - Reactive Cocoa 5 和 ReactiveSwift 网络请求处理

ios - ReactiveSwift 一个信号订阅与多个信号订阅以及相关的内存开销

ios - 重新排列 UITableView 部分、行和部分之间的行

ios - UINavigationController 的自定义 UIBarButtonItem/UISegmentedControl

ios - 当应用程序在后台或被杀死时,GCM 支持 ios 应用程序

ios - ReactiveSwift 中平面图策略之间的差异