将两个 Combine 数组合并为一个数组

Merge two Combine Arrays into a Single Array

我有两种

let left: Future<[Int]>
let right: Future<[Int]>

我怎样才能将它们组合起来,这样我就有了一个连续的一维数组?

使用appendmerge创建二维数组,没有明确的信息。确实是收集二维数组然后在 flatMap 内部使用 flatMap 的最佳方式,例如:

.collect().flatMap { arrays in arrays.flatMap { [=11=] } }

必须有更好的方法。

如果您有两个发布者发出您想要以某种方式组合的值,通常您可能需要两种类型的行为:(1) zip - 等待每个发布者发出,或 (2) combineLatest - 只要有人发出值就发出。

因此,在您的情况下,它可能是 zip

left.zip(right)
    .map { (l, r) in l + r)
    .sink { ... }

combineLatest:

left.combineLatest(right)
    .map { (l, r) in l + r)
    .sink { ... }

如果 leftright 都发出一个值(例如像 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 发出时,输出将是 [11,44,22,33,55]