如何解决group.notify 从未在 dispatchGroup 中调用
我有组和队列
let group = dispatchGroup()
let queue = dispatchQueue(label: "downloadImages",attributes: .concurrent)
在我的函数中,我发送了 3 个请求
func getimages() {
networkService.getimages(find: film.originalTitle) { [weak self] result in
guard let self = self else { return }
self.queue.async(group: self.group) {
switch result {
case let .success(posters):
guard let unwrappedPostersResult = posters?.results else { return }
self.posters?.append(contentsOf: unwrappedPostersResult)
case let .failure(error):
self.view?.failure(error: error)
}
}
}
networkService.getimages(find: film.originalLanguage) { [weak self] result in
guard let self = self else { return }
self.queue.async(group: self.group) {
switch result {
case let .success(posters):
guard let unwrappedPostersResult = posters?.results else { return }
self.posters?.append(contentsOf: unwrappedPostersResult)
case let .failure(error):
self.view?.failure(error: error)
}
}
}
networkService.getimages(find: "movies") { [weak self] result in
guard let self = self else { return }
self.queue.async(group: self.group) {
switch result {
case let .success(posters):
guard let unwrappedPostersResult = posters?.results else { return }
self.posters?.append(contentsOf: unwrappedPostersResult)
case let .failure(error):
self.view?.failure(error: error)
}
}
}
他们工作得很好,但是当我添加 dispatchGroup group.notify() 时从未调用过
group.notify(queue: .main) { [weak self] in
guard let self = self else { return }
self.view?.success()
}
如何在完成请求后调用 group.notify()?
解决方法
创建 DispatchGroup() 时,需要为所有网络服务添加 group.enter() 和 group.leave()。
let group = DispatchGroup()
let queue = DispatchQueue(label: "downloadImages",attributes: .concurrent)
// Enter group
group.enter()
networkService.getImages(find: film.originalTitle) { [weak self] result in
guard let self = self else { return }
self.queue.async(group: self.group) {
switch result {
case let .success(posters):
guard let unwrappedPostersResult = posters?.results else { return }
self.posters?.append(contentsOf: unwrappedPostersResult)
// leave group
group.leave()
case let .failure(error):
self.view?.failure(error: error)
// leave group
group.leave()
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。