为不同的订阅者设置不同的发布者层是否合适?

时间:2020-03-18 02:40:11

标签: swift 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()

1 个答案:

答案 0 :(得分:0)

让大量发布者让消费者订阅该链的不同部分

问题在于,这完全是一个玩具示例。在现实生活中,您会发现您不会在任何有意义的意义上“共享”同一最终发行商,因为您的rootPublisher struct

发布者(意味着管道的任何部分)拥有多个订阅者是完全合法的,但是除非您说出share(或multicast),否则它将成为两个单独的订阅者发布者。

但是我发现拥有一个“现成的”发行商可以使消费者轻松。我看到这不是通常用于合并的模式

那不是事实。出售复杂的不透明发布者(意味着管道的负责人)是非常标准的。例如,数据任务发布者就像“延迟的未来”加上“地图”一样,即使您看不到它。整个要点是,您要弥补并出售自己的出版商,以补偿所获得的出版商-运营商作品(或者您可以编写自己的作品)。