我有两种类型
let left: Future<[Int]>
let right: Future<[Int]>
如何将这些组合起来,以便获得一个连续的一维数组?
使用 append
和 merge
创建二维数组,没有明确的信息。确实是收集 2D 数组然后在 flatMap 中使用 flatMap 的最佳方法,例如:
.collect().flatMap { arrays in arrays.flatMap { $0 } }
必须有更好的方法。
答案 0 :(得分:2)
如果您有两个发布者发出想要以某种方式组合的值,您通常有两种可能需要的行为类型:(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,3,5]
,当 zip
发出下一个值时,例如 left
,直到 [11,44]
发出值,例如 right
,才会有输出,然后输出将是:[22,33,55]
.
使用 [11,44,22,33,55]
,只要 combineLatest
发出,输出将是 left
,然后当 [11,44,2,3,5]
发出时,输出将是 right
>