Need to configure your backend?See Build a Backend →
リアルタイムイベントの購読
リアルタイムクライアント作成のためのミューテーションを購読します。
サブスクリプションの有効期間は単一関数の有効期間より長くなるため、クラスの上部にインスタンス変数を作成できます:
var subscription: AmplifyAsyncThrowingSequence<GraphQLSubscriptionEvent<Todo>>var subscription: AnyCancellable?作成の更新をリッスンするには、次のコードサンプルを使用できます:
func createSubscription() { subscription = Amplify.API.subscribe(request: .subscription(of: Todo.self, type: .onCreate)) Task { do { for try await subscriptionEvent in subscription { switch subscriptionEvent { case .connection(let subscriptionConnectionState): print("Subscription connect state is \(subscriptionConnectionState)") case .data(let result): switch result { case .success(let createdTodo): print("Successfully got todo from subscription: \(createdTodo)") case .failure(let error): print("Got failed result with \(error.errorDescription)") } } } } catch { print("Subscription has terminated with \(error)") } }}func createSubscription() { let sequence = Amplify.API.subscribe(request: .subscription(of: Todo.self, type: .onCreate)) subscription = Amplify.Publisher.create(sequence) .sink { if case let .failure(apiError) = $0 { print("Subscription has terminated with \(apiError)") } else { print("Subscription has been closed successfully") } } receiveValue: { result in switch result { case .connection(let subscriptionConnectionState): print("Subscription connect state is \(subscriptionConnectionState)") case .data(let result): switch result { case .success(let createdTodo): print("Successfully got todo from subscription: \(createdTodo)") case .failure(let error): print("Got failed result with \(error.errorDescription)") } } }}更新から購読を解除
Async/Await
更新から購読を解除するには、サブスクリプションでcancel()を呼び出すことができます。
func cancelSubscription() { // 完了したら、サブスクリプションリスナーをキャンセルします subscription?.cancel()}Combine
シーケンスでcancel()を呼び出すと、バックエンドからサブスクリプションが切断されます。すべてのダウンストリーム購読者もキャンセルされます。
let sequence = Amplify.API.subscribe(...)let subscription = Amplify.Publisher.create(sequence)let allUpdates = subscription.sink(...)let filteredUpdates = subscription.filter{...}.sink(...)sequence.cancel() // シーケンスは切断されました // allUpdatesとfilteredUpdatesはデータを受け取りなくなります同様に、Combineサブスクライバー(例えばsink()から返されたAnyCancellable)でcancel()を呼び出すと、基になるシーケンスがキャンセルされます。これにより、すべての接続されたサブスクライバーが更新受け取りを停止します。
allUpdates.cancel() // シーケンスは切断されました // filteredUpdatesはデータを受け取りなくなります