```swift
// You must hold a reference to your subscription.
var postsSubscription: AmplifyAsyncThrowingSequence>?
// Subscribe
func subscribeToPosts() async {
let post = Post.keys
let postsSubscription = Amplify.DataStore.observeQuery(
for: Post.self,
where: post.title.beginsWith("post") && post.rating > 10.0,
sort: .ascending(post.rating)
)
// hold onto your subscription
self.postsSubscription = postsSubscription
do {
// observe new snapshots
for try await querySnapshot in postsSubscription {
print("[Snapshot] item count: \(querySnapshot.items.count), isSynced: \(querySnapshot.isSynced)")
}
} catch {
print("Error: \(error)")
}
}
// When you're finished observing, cancel the subscription
func unsubscribeFromPosts() {
postsSubscription?.cancel()
}
```
```swift
// In your type declaration, declare a cancellable to hold onto the subscription
var postsSubscription: AnyCancellable?
func subscribeToPosts() {
let post = Post.keys
self.postsSubscription = Amplify.Publisher.create(
Amplify.DataStore.observeQuery(
for: Post.self,
where: post.title.beginsWith("post") && post.rating > 10.0,
sort: .ascending(post.rating)
)
)
.sink {
if case .failure(let error) = $0 {
print("Error \(error)")
}
} receiveValue: { querySnapshot in
print("[Snapshot] item count: \(querySnapshot.items.count), isSynced: \(querySnapshot.isSynced)")
}
}
// Then, when you're finished observing, cancel the subscription
func unsubscribeFromPosts() {
postsSubscription?.cancel()
}
```