我正在尝试在当前项目中实现OperationQueue
。我觉得我的代码在使用旧代码时有些麻烦,但是它可以正常工作。上周,我发现了OperationQueue
的相关内容,因此我尝试将其实现到我的代码中,但是我无法使其正常工作。
UserProfileManager.shared.getColleagues(forDepartment: department) { (fetchedcolleagues) in
if let colleagues = fetchedcolleagues {
// Loop through colleagues
for colleague in colleagues {
// Unwrap mail
guard let mail = colleague.mail else { continue }
// Call function to get user photo
UserProfileManager.shared.getUserPhoto(email: mail, completion: { (returnedData) in
if let data = returnedData, let image = UIImage(data: data) {
colleague.addUserImage(image: image)
}
self.colleagueArray.append(colleague)
// Update collectionView
self.colleagueCollectionView.reloadData()
})
}
}
}
那么首先要做的是。我的目标是:
所以我试图将它们分为三个不同的块:
let queue = OperationQueue()
// First block to be done
let informationBlock = BlockOperation {
UserProfileManager.shared.getColleagues(forDepartment: department, completion: { (fetchedColleagues) in
if let colleagues = fetchedColleagues {
self.colleagueArray = colleagues
}
})
}
// Second block to be done
let photoOperation = BlockOperation {
for colleague in self.colleagueArray {
guard let email = colleague.mail else { continue }
UserProfileManager.shared.getUserPhoto(email: email, completion: { (returnedData) in
if let data = returnedData, let image = UIImage(data: data) {
colleague.addUserImage(image: image)
}
self.colleagueArray.append(colleague)
})
}
}
// Third block to be done
let updateOperation = BlockOperation {
self.colleagueCollectionView.updateData()
}
updateOperation.addDependency(photoOperation)
photoOperation.addDependency(informationBlock)
queue.addOperations([informationBlock, photoOperation, updateOperation], waitUntilFinished: true)
但是上面的代码将导致:
所以问题是...我如何确保将按顺序执行块?预先感谢!