How are items in CKSyncEngine.State.pendingDatabaseChanges removed after they haven been saved to cloud?

While reading CkSyncEngine demo project code, I don't find the code to remove items in syncEngine.state.pendingRecordZoneChanges explicitly. I suspect it might occur in two possible places: nextRecordZoneChangeBatch() or ``nextRecordZoneChangeBatch()`, but I can't figure out how it occurs.

nextRecordZoneChangeBatch() has the following code:

    let batch = await CKSyncEngine.RecordZoneChangeBatch(pendingChanges: changes) { recordID in
        if let contact = contacts[recordID.recordName] {
            let record = contact.lastKnownRecord ?? CKRecord(recordType: Contact.recordType, recordID: recordID)
            contact.populateRecord(record)
            return record
        } else {
            // We might have pending changes that no longer exist in our database. We can remove those from the state.
            syncEngine.state.remove(pendingRecordZoneChanges: [ .saveRecord(recordID) ])
            return nil 
        }   
    }   

(I'll ignore the syncEngine.state.remove(pendingRecordZoneChanges:) in the else clause, because it's unrelated)

Could it be that CKSyncEngine.RecordZoneChangeBatch.init(pendingChanges:,recordProvider:) automatically remove a CKRecord when the recordProvider: closure returns a non-nil value? I checked its document, but it doesn't say anything about this.

Thanks for any help.

How are items in CKSyncEngine.State.pendingDatabaseChanges removed after they haven been saved to cloud?
 
 
Q