in Encryption/ViewModels/ViewModel.swift [69:95]
func fetchContacts(completionHandler: @escaping (Result<[Contact], Error>) -> Void) {
let operation = CKFetchRecordZoneChangesOperation(recordZoneIDs: [recordZone.zoneID],
configurationsByRecordZoneID: [:])
var contacts: [Contact] = []
/// For each contact received from the operation, convert it to a `Contact` object and add it to an accumulating list.
operation.recordWasChangedBlock = { _, result in
if let record = try? result.get(), let contact = Contact(record: record) {
contacts.append(contact)
}
}
operation.fetchRecordZoneChangesResultBlock = { [weak self] result in
DispatchQueue.main.async {
switch result {
case .failure(let error):
self?.handleError(error)
completionHandler(.failure(error))
case .success:
completionHandler(.success(contacts))
}
}
}
database.add(operation)
}