---
title: ResultsObserver
framework: swiftdata
role: symbol
role_heading: Class
path: swiftdata/resultsobserver
---

# ResultsObserver

Observes and tracks changes to a collection of persistent models in a model context.

## Declaration

```swift
final class ResultsObserver<Element, SectionName> where Element : PersistentModel, SectionName : Hashable
```

## Overview

Overview ResultsObserver automatically monitors changes to models that match specified fetch criteria, providing real-time updates when the underlying data changes. The observer maintains a collection of fetched results, making it ideal for keeping user interfaces synchronized with persistent data. The observer responds to changes from multiple sources: Local changes made within the same model context Remote changes from other contexts within the same container External changes from other processes or CloudKit sync You can configure the observer using either a complete FetchDescriptor or individual filter predicates and sort descriptors. The observer is Observable, allowing SwiftUI views to automatically update when results change. Use Never as the SectionName type parameter when no sectioning is needed: let observer = try ResultsObserver<Book, Never>(     filterBy: #Predicate { $0.isPublished },     sortBy: [SortDescriptor(\.title)],     modelContext: context ) Use a concrete type (e.g. String) when sectioning by a key path of that type: let observer = try ResultsObserver<Book, String>(     sectionBy: \.genre,     modelContext: context )

## Topics

### Creating a results observer with a fetch descriptor

- [init(fetchDescriptor:modelContext:isolation:)](swiftdata/resultsobserver/init(fetchdescriptor:modelcontext:isolation:).md)
- [init(fetchDescriptor:sectionBy:modelContext:isolation:)](swiftdata/resultsobserver/init(fetchdescriptor:sectionby:modelcontext:isolation:)-7ms14.md)
- [init(fetchDescriptor:sectionBy:modelContext:isolation:)](swiftdata/resultsobserver/init(fetchdescriptor:sectionby:modelcontext:isolation:)-9kg1q.md)
- [init(fetchDescriptor:modelContainer:isolation:)](swiftdata/resultsobserver/init(fetchdescriptor:modelcontainer:isolation:).md)
- [init(fetchDescriptor:sectionBy:modelContainer:isolation:)](swiftdata/resultsobserver/init(fetchdescriptor:sectionby:modelcontainer:isolation:)-4tuzk.md)
- [init(fetchDescriptor:sectionBy:modelContainer:isolation:)](swiftdata/resultsobserver/init(fetchdescriptor:sectionby:modelcontainer:isolation:)-7wa5c.md)

### Creating a results observer with a predicate

- [init(filterBy:sortBy:modelContext:isolation:)](swiftdata/resultsobserver/init(filterby:sortby:modelcontext:isolation:).md)
- [init(filterBy:sortBy:sectionBy:modelContext:isolation:)](swiftdata/resultsobserver/init(filterby:sortby:sectionby:modelcontext:isolation:)-4ainb.md)
- [init(filterBy:sortBy:sectionBy:modelContext:isolation:)](swiftdata/resultsobserver/init(filterby:sortby:sectionby:modelcontext:isolation:)-gsuz.md)
- [init(filterBy:sortBy:modelContainer:isolation:)](swiftdata/resultsobserver/init(filterby:sortby:modelcontainer:isolation:).md)
- [init(filterBy:sortBy:sectionBy:modelContainer:isolation:)](swiftdata/resultsobserver/init(filterby:sortby:sectionby:modelcontainer:isolation:)-5ufvn.md)
- [init(filterBy:sortBy:sectionBy:modelContainer:isolation:)](swiftdata/resultsobserver/init(filterby:sortby:sectionby:modelcontainer:isolation:)-9lfy0.md)

### Accessing observer properties

- [fetchDescriptor](swiftdata/resultsobserver/fetchdescriptor.md)
- [filterBy](swiftdata/resultsobserver/filterby.md)
- [modelContext](swiftdata/resultsobserver/modelcontext.md)
- [sortBy](swiftdata/resultsobserver/sortby.md)
- [sectionBy](swiftdata/resultsobserver/sectionby.md)
- [sections](swiftdata/resultsobserver/sections.md)
- [ResultsSectionCollection](swiftdata/resultssectioncollection.md)

### Accessing observer results

- [results](swiftdata/resultsobserver/results.md)
- [element(at:)](swiftdata/resultsobserver/element(at:).md)
- [indexPath(for:)](swiftdata/resultsobserver/indexpath(for:).md)

## Relationships

### Conforms To

- [Copyable](swift/copyable.md)
- [CustomDebugStringConvertible](swift/customdebugstringconvertible.md)
- [Escapable](swift/escapable.md)
- [Observable](observation/observable.md)

## See Also

### Data store observation

- [HistoryObserver](swiftdata/historyobserver.md)
