为不同的订阅者设置不同层次的发布者是否合适?
Is it appropriate to have different layers of Publishers for different subscribers?
发布者管道让消费者订阅链的不同部分是否可以接受?
理论上订阅者可以在自己的管道中进行处理和过滤。但我发现拥有 'ready made' 出版商可以让消费者轻松进行。我看到这不是 Combine 通常使用的模式。这有什么我想念的缺点吗?
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()
for a pipeline of publishers to have consumers subscribe to the different parts of the chain
问题是那完全是玩具示例。在现实生活中,您会发现在任何意义上您都不会 "sharing" 相同的最终发布者,因为您的 rootPublisher
是一个 struct.
一个发布者(即管道头部的任何部分)拥有多个订阅者是完全合法的,但除非你说 share
(或 multicast
),否则它会变成两个独立的出版商。
But I find that having a 'ready made' publisher makes it easy for the consumer. I see that this is not the pattern generally used for Combine
事实并非如此。出售一个复杂的不透明发布者(意味着管道的头部)是非常标准的。例如,一个数据任务发布者就像一个 Deferred Future 加上一个 Map,尽管你看不到它。重点是您可以根据给定的发布商-运营商作品来弥补和销售自己的发布者(或者您可以编写自己的作品)。
发布者管道让消费者订阅链的不同部分是否可以接受?
理论上订阅者可以在自己的管道中进行处理和过滤。但我发现拥有 'ready made' 出版商可以让消费者轻松进行。我看到这不是 Combine 通常使用的模式。这有什么我想念的缺点吗?
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()
for a pipeline of publishers to have consumers subscribe to the different parts of the chain
问题是那完全是玩具示例。在现实生活中,您会发现在任何意义上您都不会 "sharing" 相同的最终发布者,因为您的 rootPublisher
是一个 struct.
一个发布者(即管道头部的任何部分)拥有多个订阅者是完全合法的,但除非你说 share
(或 multicast
),否则它会变成两个独立的出版商。
But I find that having a 'ready made' publisher makes it easy for the consumer. I see that this is not the pattern generally used for Combine
事实并非如此。出售一个复杂的不透明发布者(意味着管道的头部)是非常标准的。例如,一个数据任务发布者就像一个 Deferred Future 加上一个 Map,尽管你看不到它。重点是您可以根据给定的发布商-运营商作品来弥补和销售自己的发布者(或者您可以编写自己的作品)。