相关疑难解决方法(0)

结合框架序列化异步操作

如何让构成Combine框架的异步管道同步(串行)排队?

假设我有 50 个 URL,我想从中下载相应的资源,假设我想一次下载一个。我知道如何使用 Operation/OperationQueue 来做到这一点,例如使用一个 Operation 子类,该子类在下载完成之前不会声明自己已完成。我将如何使用Combine 做同样的事情?

目前我想到的只是保留一个剩余 URL 的全局列表并弹出一个,为一次下载设置一个管道,进行下载,然后在sink管道中重复。这似乎不太像结合。

我确实尝试制作一组​​ URL 并将其映射到一组发布者。我知道我可以“生产”一个发布者,并使用flatMap. 但后来我仍然在同时进行所有下载。没有任何组合方式以受控方式遍历阵列——或者有吗?

(我也想象过用 Future 做点什么,但我变得绝望了。我不习惯这种思维方式。)

ios swift combine

27
推荐指数
4
解决办法
6262
查看次数

如何使用 Dispatch Groups 等待调用依赖于不同数据的多个函数?

我有三个变量abc。我有三个带有完成块的异步函数来更新这些变量,另外三个函数只处理一些数据。

我确保工作函数等到所有数据都更新为DispatchGroup.

// The Data
var a: String?
var b: String?
var c: String?

// The Update
let group = DispatchGroup()

group.enter()
updateA() {
    group.leave()
}

group.enter()
updateB() {
    group.leave()
}

group.enter()
updateC() {
    group.leave()
}

group.wait()

// The work
doSomthingWith(a: a, b: b)
doSomethingElseWith(b: b, c: c)
doAnotherThingWith(a: a, c: c)
Run Code Online (Sandbox Code Playgroud)

我希望能够做的是在参数更新后调用每个工作函数,而不是等待一切。这只是一个(显然)简化版本。可能有更多的变量和函数。

我正在使用斯威夫特。提前谢谢了。

grand-central-dispatch swift dispatchgroup

2
推荐指数
1
解决办法
1869
查看次数