swift - 将 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 工作,但相反,来操作流,它将一个一个地从数组中发出值。
有没有运营商可以做到这一点?
解决方案
我通过使用解决了它Sequence
:
let sub = Publishers
.Sequence(sequence: Array(1...100))
.sink(receiveValue: { print($0) })
.store(in: &subscriptions)
推荐阅读
- kubernetes - kubeadm 升级后块存储上的数据全部消失
- python - python中是否有通用的`str(int,base = n)`功能?
- isabelle - Isabelle:如何识别具有相同但不相同参数的两个祖先语言环境?
- r - 替换数据帧中的错误编码
- php - Codeigniter 查询字符串 URL 问题
- sass - Sass 只是一遍又一遍地崩溃,错误消息不正确
- java - Java XML 解析器使用 xpath 澄清来获取标记值
- testing - 从另一个类调用受保护方法的测试方法
- amazon-web-services - 来自 S3 存储桶的 AWS Athena 外部表将所有数据放在第一列
- azure-ad-b2c - Azure B2C 支持具有多个并发凭据的单个用户