我正在尝试扩展自己的编码技能,最近我一直在阅读有关如何使用DispatchGroup()和Semaphores()避免回调地狱的信息。
有人可以帮助我举例说明在上一个操作完成后如何解开正在执行多个网络调用的功能吗?
代码如下:
func fetchFollowingUsersAndUpdateCollectionView() {
UserService.shared.fetchCurrentUsersContacts { (result) in
switch result {
case .success(let contactUid):
UserService.shared.fetchUserInfo(userUid: contactUid) { (resultUserInfo) in
switch resultUserInfo {
case .success(let dict):
guard
let fullname = dict["fullname"],
let profileImageUrl = dict["profileImageUrl"]
else { return }
DispatchQueue.main.async {
UserService.shared.downloadAndCreateImage(url_String: profileImageUrl) { (imageResult) in
switch imageResult {
case .success(let profileImage):
let dispatchGroup = DispatchGroup()
dispatchGroup.notify(queue: .main) {
let user = User(uid: contactUid, fullname: fullname, profileImage: profileImage, isFollowed: true)
self.contactsArray.append(user)
self.selectUserCollectionView.reloadData()
}
case .failure(let imageResultError):
print(imageResultError.localizedDescription)
}
}
}
case .failure(let userInfoError):
print(userInfoError.localizedDescription)
}
}
case .failure(let resultError):
print(resultError.localizedDescription)
}
}
}