,swift,combine"/>

首页 > 解决方案 > 将 PassthroughSubject<[Int], Never> 映射到 AnyPublisher

问题描述

我想实现与收集运算符相反的效果。我不想收集 10 个项目然后获取具有数组类型的发布者,而是希望获取具有数组类型的主题并让发布者逐个获取每个数组元素。

所以我可以通过这样做得到我想要的输出:

let subject = PassthroughSubject<Int, Never>()

let sub = subject.sink(receiveValue: {
    print($0)
})

for val in 1...100 {
    subject.send(val)
}

我希望它像这样工作,主题获取一个数组,然后添加另一个运算符以从数组中逐个发出值,就像collect运算符的反面一样:

let subject = PassthroughSubject<[Int], Never>()

let sub = subject.sink(receiveValue: {
    print($0)
})

subject.send(Array(1...100))

问题是第二个实现打印整个数组,因为它只是将它作为一个值获取。我想在流中添加一个阶段,有点像 collect 工作,但相反,来操作流,它将一个一个地从数组中发出值。

有没有运营商可以做到这一点?

标签: swiftcombine

解决方案


我通过使用解决了它Sequence

let sub = Publishers
.Sequence(sequence: Array(1...100))
.sink(receiveValue: { print($0) })
.store(in: &subscriptions)

推荐阅读