func fetchContacts()

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)
    }