让大量发布者让消费者订阅该链的不同部分是否可以接受?
理论上,订户可以在其自己的管道中进行处理和过滤。但是我发现拥有“现成的”发行商对消费者来说很容易。我看到这不是通常用于合并的模式。我缺少这个缺点吗?
import UIKit
import Combine
class Publisher {
var rootPublisher = [1, 2, 3, 4, 5].publisher
var evenPublisher: AnyPublisher<Int, Never>
init () {
evenPublisher = rootPublisher.filter { num in num % 2 == 0 }.eraseToAnyPublisher()
}
}
class Consumer {
let publisher = Publisher()
func numbers () {
publisher.rootPublisher.sink { int in
print(int)
}
}
func evenNumbers() {
publisher.evenPublisher.sink { int in
print(int)
}
}
}
Consumer().numbers()
Consumer().evenNumbers()
答案 0 :(得分:0)
让大量发布者让消费者订阅该链的不同部分
问题在于,这完全是一个玩具示例。在现实生活中,您会发现您不会在任何有意义的意义上“共享”同一最终发行商,因为您的rootPublisher
是 struct 。
发布者(意味着管道的任何部分)拥有多个订阅者是完全合法的,但是除非您说出share
(或multicast
),否则它将成为两个单独的订阅者发布者。
但是我发现拥有一个“现成的”发行商可以使消费者轻松。我看到这不是通常用于合并的模式
那不是事实。出售复杂的不透明发布者(意味着管道的负责人)是非常标准的。例如,数据任务发布者就像“延迟的未来”加上“地图”一样,即使您看不到它。整个要点是,您要弥补并出售自己的出版商,以补偿所获得的出版商-运营商作品(或者您可以编写自己的作品)。