如何解决将两个组合数组合并为一个数组
我有两种类型
let left: Future<[Int]>
let right: Future<[Int]>
如何将这些组合起来,以便获得一个连续的一维数组?
使用 append
和 merge
创建二维数组,没有明确的信息。确实是收集 2D 数组然后在 flatMap 中使用 flatMap 的最佳方法,例如:
.collect().flatMap { arrays in arrays.flatMap { $0 } }
必须有更好的方法。
解决方法
如果您有两个发布者发出想要以某种方式组合的值,您通常有两种可能需要的行为类型:(1) zip
- 等待每个发布者发出,或 (2) {{ 1}} - 只要有人发出值就发出。
因此,就您而言,它可能是 combineLatest
zip
或left.zip(right)
.map { (l,r) in l + r)
.sink { ... }
:
combineLatest
它们的行为相同,如果 left.combineLatest(right)
.map { (l,r) in l + r)
.sink { ... }
和 left
都发出单个值(例如像 right
那样)。因此,如果 Future
发出 left
并且 [1,4]
发出 right
,输出将是 [2,3,5]
不同之处在于之后会发生什么。
使用 [1,4,2,5]
,当 zip
发出下一个值时,例如 left
,直到 [11,44]
发出值,例如 right
,才会有输出,然后输出将是:[22,33,55]
.
使用 [11,44,22,55]
,只要 combineLatest
发出,输出将是 left
,然后当 [11,5]
发出时,输出将是 right
>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。