<!--
{
  "availability" : [
    "iOS: 18.0.0 -",
    "iPadOS: 18.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "ContactProvider",
  "identifier" : "/documentation/ContactProvider/ContactItemEnumerator/enumerateChanges(startingAt:for:)",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "ContactProvider"
    ],
    "preciseIdentifier" : "s:15ContactProvider0A14ItemEnumeratorP16enumerateChanges10startingAt3foryAA0aC10SyncAnchorV_AA0aC14ChangeObserver_ptYaF"
  },
  "title" : "enumerateChanges(startingAt:for:)"
}
-->

# enumerateChanges(startingAt:for:)

Enumerates items changed since the last sync.

```
func enumerateChanges(startingAt syncAnchor: ContactItemSyncAnchor, for observer: any ContactItemChangeObserver) async
```

## Parameters

`syncAnchor`

The sync anchor to enumerate changed items from.

`observer`

The system observer that receives the change items and
enumeration state.

## Discussion

The system calls `enumerateChanges(startingAt:for:)` for each batch of changed items to enumerate.
After enumerating each batch of changed items, your implementation calls [`didFinishEnumeratingChanges(upTo:moreComing:)`](/documentation/ContactProvider/ContactItemChangeObserver/didFinishEnumeratingChanges(upTo:moreComing:)) .

Your implementation can enumerate items in any order, but that order must be deterministic and resumable.

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)