为了更快地加载,我想使用调度组,但是在这种情况下该怎么做?
同时,我想开始加载executionRepository和streakRepository。
private func loadDailyWorkout(completion: @escaping ((DailyWorkout) -> Void)) {
workoutRepository.load { [weak self] (result) in
switch result {
case .success(let list):
if list.isEmpty {
self?.shouldShowWorkoutUnlockedScreen = true
}
self?.streakRepository.load { (result) in
switch result {
case .success(let streak):
let workout = DailyWorkout(streak: streak, tricks: list)
completion(workout)
case .failure:
let workout = DailyWorkout(streak: Streak.initial, tricks: list)
completion(workout)
}
}
default:
completion(DailyWorkout(streak: Streak.initial, tricks: []))
}
}
}
这是一个草图:
private func loadDailyWorkout(completion: @escaping ((DailyWorkout) -> Void)) {
myBackgroundQueue.async {
let group = DispatchGroup()
var streak = // Optional of the right type, initially nil
var list = // Optional of the right type, initially nil
group.enter()
workoutRepository.load { result in {
// do stuff; set list
group.leave()
}
group.enter()
streakRepository.load { result in
// do stuff; set streak
group.leave()
}
group.notify(queue: .main) {
// can see streak and list
// so now go ahead and do your callback
}
}
}
这两个load
命令是同时执行的,但是notify
直到两个命令都完成后,我们才继续执行()。
请注意,我首先将我们放在后台队列中,因为我们不能在主队列上“等待”。在您的情况下,这可能不是必需的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句