这个问题以前已经被有效地问过了(Combine assign publisher to PassthroughSubject),但是答案假设这个问题的例子的结构是完全错误的。
我也面临着同样的问题,在我觉得是另一个例子的情况下,我非常喜欢澄清这个问题。
我有一个viewmodel类,它为客户端层提供了一个公共的errorMessage发布者来完成它想要做的事情。这里只有一根绳子。私下里,这个出版商是由一个PassthroughSubject支持的--我在内部从不同的地方“进入monad”,所以我想在那个阶段紧急地发送错误消息。
我在这里的切入点之一恰好是另一个联合出版商。我只想映射和绑定,就像在RxSwift中所做的那样:
private let _errorMessageSubject = PublishSubject<String>()
public let errorMessageRail = _errorMessageSubject.asObservable()
private func setup() {
...
myEngine.errorMessages
.map { msg in "Internal error: \(msg)" }
.bind(to: _errorMessageSubject)
...
}
private func someOtherMethod() {
_errorMessageSubject.onNext("Surprise")
}在联合收割机中,我不知道怎么做,只知道:
private let _errorMessageSubject = PassthroughSubject<String,Never>()
public let errorMessageRail = _errorMessageSubject.eraseToAnyPublisher()
private func setup() {
...
myEngine.errorMessages
.map { msg in "Internal error: \(msg)" }
.sink { [weak self] msg in
self?._errorMessageSubject.send(msg)
}
...
}
private func someOtherMethod() {
_errorMessageSubject.send("Surprise")
}在我们讨论并发性问题之前,假设我总是在特定的调度队列上仔细地推送到_errorMessageSubject。为了清楚起见,我从上面的代码中省略了这一点。
因此,考虑到这个例子,除非我遗漏了一些非常明显的东西,否则flatMap不会在这里帮助我。
self-improvement?
发布于 2022-05-12 07:15:45
这听起来像是你想让你的铁路成为_errorMessageSubject和另一个出版商的合并。因此,我将使errorMessageRail成为一个变量,这样它就可以在初始化后(仅通过这个类)进行更改:
public private(set) var errorMessageRail = _errorMessageSubject.eraseToAnyPublisher()然后,在安装程序中,更改轨道,使其包括附加流:
func setup() {
...
errorMessageRail = _errorMessageSubject.merge( with:
myEngine.errorMessages
.map { msg in "Internal error: \(msg)" }
).eraseToAnyPublisher()
}https://stackoverflow.com/questions/72010969
复制相似问题