gpt4 book ai didi

swift - 在 RxSwift PublishSubject 上完成后订阅最后一个值

转载 作者:搜寻专家 更新时间:2023-10-30 22:02:39 33 4
gpt4 key购买 nike

我正在寻找这样的东西:

let observable = PublishSubject<String>()
observable.onNext("1")
observable.onCompleted()

_ = observable.subscribeNext { s in
print(s)
}

所以我想在 Observable 完成后订阅它并仍然获得值(或只是最后一个值)。

最佳答案

您使用了错误的 Subject 来获得您想要的内容。 Take a look at the descriptions of the Subjects :

PublishSubject:在订阅时向所有观察者广播新事件。

ReplaySubject:向所有订阅者广播新事件,向新订阅者广播指定 bufferSize 数量的先前事件。

BehaviorSubject:向所有订阅者广播新事件,向新订阅者广播最新(或初始)值。

Variable:包装一个 BehaviorSubject,因此它将向新订阅者发出最新(或初始)值。并且 Variable 也保持当前值状态。变量永远不会发出错误事件。但是,它将自动发出一个 Completed 事件并在 deinit 时终止。


因此,不要使用 PublishSubject,因为它只会在订阅时广播新事件

您可以使用ReplaySubject 获取所有以前的事件,或者您可以使用ReplaySubjectBehaviorSubjectVariable 获取最新值。

let disposeBag = DisposeBag()

// ALL previous events
let subject = ReplaySubject<String>.createUnbounded()
// or use this to get just the last, say, 4:
// let subject = ReplaySubject<String>.create(bufferSize: 4)
// or use one of these to get the most recent:
// let subject = ReplaySubject<String>.create(bufferSize: 1)
// let subject = BehaviorSubject(value: "blah")
// let subject = Variable("blah")

subject.onNext("blah")
subject.onNext("foo")
subject.onCompleted()

subject
.asObservable()
.subscribeNext { print($0) }
.addDisposableTo(disposeBag)

输出:

blah
foo

关于swift - 在 RxSwift PublishSubject 上完成后订阅最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39441030/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com