如何合并 2 个发布者并将值擦除为 Void?
How to combine 2 publishers and erase values to Void?
我有 2 个发布商,我想根据其中任何一个响应执行操作。我不关心价值观。我正在尝试做这样的事情:
var hasChangedPublisher: AnyPublisher<(Void, Void), Never> {
Publishers.CombineLatest(
preferences.publisher,
state.$permissionStatus
).eraseToAnyPublisher()
}
如果 preferences.publisher
先开火而不是另一个开火,我想开火。如果 state.$permissionStatus
开火但另一个不开火,我想开火。我真的不想 CombineLatest
,但不确定如果其中任何一个发射如何发射。
有没有一种方法可以产生一个即使触发但更优雅地擦除其值的方法?
不要使用 CombineLatest,而是使用 Merge。
CombineLatest 基于所有合并的发布者创建一个元组。这很好,除了,它根本不会触发,直到每个合并的发布者都至少触发一次。之后,它会在每次触发它的任何组合发布者时触发一次——(将每个发布者的最后一个值合并到元组中)。
合并只是将所有合并的发布者多路复用在一起并生成事件流 - 包含来自任何合并的发布者的单一值流。
您正在寻找 Merge
而不是 CombineLatest
。您的代码类似于以下内容:
var hasChangedPublisher: AnyPublisher<Void, Never> {
preferences.publisher
.merge(state.$permissionStatus)
.map({ _ in
return () // transform to Void
})
.eraseToAnyPublisher()
}
//转换为虚空
.map { _ }
我有 2 个发布商,我想根据其中任何一个响应执行操作。我不关心价值观。我正在尝试做这样的事情:
var hasChangedPublisher: AnyPublisher<(Void, Void), Never> {
Publishers.CombineLatest(
preferences.publisher,
state.$permissionStatus
).eraseToAnyPublisher()
}
如果 preferences.publisher
先开火而不是另一个开火,我想开火。如果 state.$permissionStatus
开火但另一个不开火,我想开火。我真的不想 CombineLatest
,但不确定如果其中任何一个发射如何发射。
有没有一种方法可以产生一个即使触发但更优雅地擦除其值的方法?
不要使用 CombineLatest,而是使用 Merge。
CombineLatest 基于所有合并的发布者创建一个元组。这很好,除了,它根本不会触发,直到每个合并的发布者都至少触发一次。之后,它会在每次触发它的任何组合发布者时触发一次——(将每个发布者的最后一个值合并到元组中)。
合并只是将所有合并的发布者多路复用在一起并生成事件流 - 包含来自任何合并的发布者的单一值流。
您正在寻找 Merge
而不是 CombineLatest
。您的代码类似于以下内容:
var hasChangedPublisher: AnyPublisher<Void, Never> {
preferences.publisher
.merge(state.$permissionStatus)
.map({ _ in
return () // transform to Void
})
.eraseToAnyPublisher()
}
//转换为虚空 .map { _ }